view类在Spring控制器配置文件中的配置
<!-- 配置Excel文件解析器 -->
<bean class="org.springframework.web.servlet.view.BeanNameViewResolver">
<!-- 配置优先级 假如存在一个excelView.jsp页面,如果这个页面的优先级大于Excel 视图类,则直接跳转到jsp页面,而不执行到处Excel文件操作 -->
<property name="order" value="10"/>
</bean>
<bean id="excelView" class="com.lovo.view.UserListViewResolver"/>
<bean id="pdfView" class="com.lovo.view.WordListPdfView"/>
导出Excel表格类
package com.lovo.view;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.springframework.web.servlet.view.document.AbstractExcelView;
import com.lovo.entity.User;
/**
* 使用静态类AbstractExcelView生成excel文件
* @author tian
*/
public class UserListViewResolver extends AbstractExcelView {
@Override
protected void buildExcelDocument(Map<String, Object> map,
HSSFWorkbook book, HttpServletRequest req, HttpServletResponse resp)
throws Exception {
resp.setContentType("application/vnd.ms-excel");
//由于Tomcat内部编码被改成了utf-8 因此需要将告诉浏览器的中文文件名再转回成iso-8859-1
// 浏览器才能够识别出该中文文件名
resp.setHeader("Content-Disposition",
"inline;filename="+new String("用户列表".getBytes(), "iso-8859-1"));
HSSFSheet sheet = book.createSheet("用户列表");
HSSFCell tempCell;
tempCell = getCell(sheet, 0, 0);
setText(tempCell, "用户名");
tempCell = getCell(sheet, 0, 1);
setText(tempCell, "密码");
List<User> list = (List<User>) map.get("userList");
for(int i=0;i<list.size();++i){
tempCell = getCell(sheet, i+1, 0);
setText(tempCell, list.get(i).getUsername());
tempCell = getCell(sheet, i+1, 1);
setText(tempCell, list.get(i).getPassword());
}
}
}
导出PDF类
package com.lovo.view;
import java.awt.Color;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.view.document.AbstractPdfView;
import com.lowagie.text.Document;
import com.lowagie.text.Font;
import com.lowagie.text.Paragraph;
import com.lowagie.text.pdf.BaseFont;
import com.lowagie.text.pdf.PdfWriter;
public class WordListPdfView extends AbstractPdfView {
@Override
protected void buildPdfDocument(Map<String, Object> map, Document doc,
PdfWriter pw, HttpServletRequest req, HttpServletResponse resp)
throws Exception {
resp.setHeader("Content-Disposition",
"inline;filename="+new String("用户列表".getBytes(), "iso-8859-1"));
resp.setContentType("application/pdf");
List<String> words = (List<String>) map.get("words");
BaseFont bfont = BaseFont.createFont("STSongStd-Light", "UniGB-UCS2-H", false);
Font font = new Font(bfont, 14, Font.BOLD, Color.BLUE);
for(int i=0,len=words.size();i<len;++i){
doc.add(new Paragraph(words.get(i), font));
}
}
}
控制器中,如何实现导出功能
/**
* 使用AbstractExcelView生成Excel文件
* 为什么返回excelView后就能跳转到UserListViewResolver???
* @param map
* @return
*/
@RequestMapping("/getExcel")
public String getExcel(ModelMap map){
List<User> list = new ArrayList<>();
User u1 = new User("jack", "123");
User u2 = new User("bob", "234");
User u3 = new User("marry", "567");
list.add(u1);
list.add(u2);
list.add(u3);
map.addAttribute("userList", list);
return "excelView";
}
@RequestMapping("/getPdf")
public String getPdf(ModelMap map){
List<String> words = new ArrayList<>();
words.add("shit!");
words.add("fuck!");
words.add("foolish!");
map.addAttribute("words", words);
return "pdfView";
}