Jfinal接口中使用导出excel功能,必须使用renderNull才能在网页上生成一个excel出来否则提示response已经被导出excel那个进程在占用。错误提示:
java.lang.IllegalStateException: getOutputStream() has already been called for this response
现在有个需求因为导出需要比较长的时间前端需要后台返回个状态码来终止加载动画效果,而renderNull不能返回任何信息。求教波总:怎样实现生成excel的同时在response返回个状态码?
/**
* 导出学员列表
*/
public void exportTeamStuList(){
Integer teamId = getParaToInt("teamId");//班级Id
//校验必填参数, 确保不能为空
if (!notNull(Require.me().put(teamId, "班级ID不能为空!"))) {
return;
}
String teamName = currTeam.getStr("teamName");
//按条件从数据库取列表数据
List<Record> listVo = new ArrayList<Record>();
//3.拼接目录列表
Record dirTitleRow = new Record();
dirTitleRow.set("col1", "排名");
dirTitleRow.set("col2", "姓名");
dirTitleRow.set("col3", "手机号");
dirTitleRow.set("col4", "部门");
dirTitleRow.set("col5", "已学完");
dirTitleRow.set("col6", "完成率");
dirTitleRow.set("col7", "学习时长");
listVo.add(dirTitleRow);
List<Record> stuList = BussBackPojo.dao.getTeamStuListExport(teamId);
if(null != stuList && stuList.size()>0){
listVo.addAll(stuList);
}
//导出Excel文件数据 ,fileDir为空表示直接生一个新的excel,否则按模板导出.
String fileDir = ""; //request.getSession().getServletContext().getRealPath("static")+File.separator+"excelTemplates"+File.separator+"活动券领取详情导出模板.xlsx";
String fileName= teamName+"-学员列表导出"+DateUtils.getDate("yyyyMMddHHmmss")+".xlsx";
String sheetName="Sheet1";
PoiUtil.createNewExcel(fileDir,fileName,sheetName,listVo,getResponse()); //生成一个excel输出到客户端
renderNull();
}