Jfinal接口中使用导出excel功能,使用renderNull实现生成excel的同时在response返回个状态码?

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();

}

评论区

lyh061619

2018-03-22 11:32

你这个问题,我建议你去osc上找jfinal-ext2这个扩展插件项目看下,时面有个excel插件的,也就是POiRender的封装,你拿去参考下。

AndrewTseng

2018-03-22 11:39

@lyh061619 好的,我先去看下。谢谢哒

杜福忠

2018-03-22 21:41

热门反馈

扫码入社