【业务场景】
项目中需要实现查询后的数据导出为Excle,所以需要向服务端传递搜索条件
传送门:导出为Excle的实现方法
【处理方式】
整体思路:前端模拟表单进行提交,服务端接收表单参数,处理下载请求
前端:
function postExcelFile(params, url) {
//params是post请求需要的JSON格式参数,url是请求url地址
var form = document.createElement("form");
form.style.display = 'none';
form.action = url;
form.method = "post";
form.enctype = 'multipart/form-data';
document.body.appendChild(form);
var input = document.createElement("input");
input.type = "hidden";
input.name = 'aboutdownloadExcle';
input.value = JSON.stringify(params);
form.appendChild(input);
form.submit();
form.remove();
}
服务端
@ResponseBody
@RequestMapping("/downloadExporExcle")
//@RequestParam("aboutdownloadExcle")与前端name对应
public void downloadExporExcle(HttpServletResponse response, @RequestParam("aboutdownloadExcle")String aboutdownloadExcle) {
JSONObject obj = JSONObject.fromObject(aboutdownloadExcle);
// ** 业务逻辑开始 **
Integer pid = Integer.valueOf(obj.get("pid").toString());
//通过图层id获取字段信息
List<FieldParameter> fieList = fieldpser.selectByFPid(pid);
//通过图层id获取图层对象
LayerParameters layerparame = layerpserver.selectLayerParameterByPid(pid);
//查询字段
String fieldList = obj.get("fieldList").toString();
String levelnumList = obj.get("levelnumList").toString();
// ** 业务逻辑结束 **
//查询后数据的数据
List<Map<String, Object>> getMessAboutExcle = fileser.getMessAboutExcle(pid, fieldList,levelnumList, layerparame.getpNameEn());
//Excle处理
ExportExcel export = new ExportExcel();
HSSFWorkbook hs = export.exportExcel(fieList, getMessAboutExcle);
try {
// 清空response
response.reset();
// 设置response的Header,设置下载文件名
response.setHeader("Content-Disposition", "inline;fileName=\"" + new String((layerparame.getpNameCn() + ".xls").getBytes("utf-8"),"ISO8859-1") + "\"");
// response.addHeader("Content-Length", "" + .length());
response.setContentType("application/vnd.ms-excel;charset=utf-8");
OutputStream os = response.getOutputStream();
hs.write(os);
os.close();
hs.close();
} catch (IOException e) {
e.printStackTrace();
}
}