Spring +EasyUi+Spring Jpa(持久层)
EasyUi通过POI 实现导出xls表格功能
EasyUi界面:
点击导出按钮实现数据导入到xls表格中
第一步:修改按钮事件:
@Controller
@ParentPackage("struts-default")@Namespace("/")@Scope("prototype")public class SubAreaAction extends ActionSupport implements ModelDriven<Subarea>//注入service层
@Resource
private SubAreaservice subareaservice;//导出按钮绑定的事件
function doExport() {//实现访问action的有三种方式:form表单提交、js中调用submit方法、location.href。
location.href="${pageContext.request.contextPath}/subArea_Export.action" }第二步:在action中提供方法:
@Action(value = "subArea_Export") public String subAreaExport() throws IOException { // 查询所有的数据 List<SubArea> list = subareaservice.findSubArea(); if (list != null && list.size() > 0) { //2.创建空的excel文件,在sheet页中设置标题行 //2.1使用workbook创建空excel HSSFWorkbook wb = new HSSFWorkbook();
//2.2在excel中创建空sheet
HSSFSheet cs = wb.createSheet(); //2.3在sheet中创建标题行 HSSFRow row = cs.createRow(0);//2.4在标题行创建单元格,赋值
row.createCell(0).setCellValue("分区编号"); row.createCell(1).setCellValue("分区地址"); row.createCell(2).setCellValue("分区关键字"); row.createCell(3).setCellValue("分区辅助关键字"); row.createCell(4).setCellValue("区域编号"); int index = 1;//3.循环分区数据,将数据填充到excel中
for (SubArea subarea : list) {//创建新行
HSSFRow row1 = cs.createRow(index++);//创建新单元格,赋值
row1.createCell(0).setCellValue(subarea.getId()); row1.createCell(1).setCellValue(subarea.getAddress()); row1.createCell(2).setCellValue(subarea.getKeyWords()); row1.createCell(3).setCellValue(subarea.getAssistKeyWords());if (subarea.getFixedArea() != null) { row1.createCell(4).setCellValue(subarea.getFixedArea().getId()); } else { row1.createCell(4).setCellValue("信息未初始化"); } } //4.设置文件下载响应参数:文件名、一个流两个头 String filename = "ceshi.xls";
//获取浏览器类型
String header = ServletActionContext.getRequest().getHeader("User-Agent"); String mimeType = ServletActionContext.getServletContext().getMimeType(filename); filename = FileUtils.encodeDownloadFilename(filename, header); //一个流:response的输出流 ServletOutputStream os = ServletActionContext.getResponse().getOutputStream(); //两个头之一:content-type,告诉浏览器返回的数据格式 ServletActionContext.getResponse().setContentType(mimeType);//两个头之二:content-disposition,告诉浏览器打开数据的方式,下载方式打开:attachment;filename=【文件名】
ServletActionContext.getResponse().setHeader("content-disposition", "attachment;filename=" + filename);//5.使用response将文件返回到前台
wb.write(os); } return NONE; }第三步:通过controller层调用service层
@Service
@Transactionalpublic class SubAreaserviceimp implements SubAreaservice {@Override
public List<SubArea> findSubArea() { // TODO Auto-generated method stub return subareadao.findAll(); }}
由于此测试持久层用到JPA所以不能处理持久层的代码了。
直接测试。
测试结果如图: