|
需求是这样:一个主表对应四个子表,组装成一个EXCEL,有四个Sheet
打算使用.j的方式下载,希望是在.j文件获取表,然后组装数据后写入EXCEL,然后在下载,应该怎么做?
这个是下载页面的方法:
Model.prototype.exportExcelBtnClick = function(event){ //导出信息
var fileName = "质量信息管理.xlsx";
// 这个案例中为了下载时能给出文件名,自定义了一个.j用于执行下载的get请求,.j请参考"$UI/demo/actions/process/invokeAction/downloadFile.j"
// 提交前需要进行URL转换,在URL上补足bsessionid等必要信息
var url = require.toUrl("$UI/inforGather/infor/process/infor/downloadFile.j?bsessionid=" + this.getContext().getBSessionID());
// 用get方式传参
url = url
+ "&process=" + this.getContext().getCurrentProcess()
+ "&activity=" + this.getContext().getCurrentActivity()
+ "&executor=" + this.getContext().getExecutor()
+ "&action=downloadFile"
+ "&fileName=" + fileName;
// 弹出下载
window.open(url);
};
这个是.j文件
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String fileName = request.getParameter("fileName");
// 构造动作对象
Action action = new Action();
action.setProcess(request.getParameter("process"));
action.setActivity(request.getParameter("activity"));
action.setName(request.getParameter("action"));
action.setExecutor(request.getParameter("executor"));
action.setParameter("fileName", request.getParameter("fileName"));
String bSessionID = NetUtils.getBSessionID(request);
String language = NetUtils.getLanguage(request);
// 在返回的头部信息中,指定以附件方式下载,并指定文件名
response.addHeader("Content-disposition", "attachment;filename=\"" + java.net.URLEncoder.encode(fileName, "UTF8") + "\";");
// 调用动作
ActionEngine.invokeAction(action,
ActionUtils.BINARY_CONTENT_TYPE, // 返回数据格式
bSessionID, // bsessionid是必须的
language, // 语言
new StreamCallback(response) // 以流的方式返回
);
}
|
|