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
@Transactional
public class SubAreaserviceimp implements SubAreaservice {
@Override
public List<SubArea> findSubArea() {
// TODO Auto-generated method stub
return subareadao.findAll();
}
}
由於此測試持久層用到JPA所以不能處理持久層的代碼了。
直接測試。
測試結果如圖: