一、前端触发提交
a)表单提交,页面有跳转,显示空白页,此方法可行,但不可取;
b)window.location.href方式提交,如下,适合参数不多的情况;
var url = "export_xxx.do_"; window.location.href = url + "?param=" + encodeURI(encodeURI(json));
c)页面增加隐藏域,异步提交
jsp:
<form action="export_xxx.do_" method="post" name="doPostRequest" id="doPostRequest"> <input type="text" id="param" name="param" value=""/> <input type="submit" id="doExportExcel" name="doExportExcel" value="Excel导出"/> </form>
js:
$("#param").val(encodeURI(trlist.join(param))); window.document.doPostRequest.action = "export_xxx.do_"; window.document.doPostRequest.submit();
二、controller接受请求并以流的形式写出
/** * 导出下单结果excel */ @RequestMapping("/export_xxx")public void export_xxx(HttpServletRequest request, HttpServletResponse response) { try { byte[] fileNameByte = ("文件名称.xls").getBytes("gbk"); String filename = new String(fileNameByte, "ISO8859-1"); HSSFWorkbook workbook = new HSSFWorkbook(); HSSFSheet sheet = workbook.createSheet("sheet页名称"); for (int rowNum = 0; rowNum < 5; rowNum++) { HSSFRow row = sheet.createRow(rowNum); for (int columnNum = 0; columnNum < 10; columnNum++) { row.createCell(rowNum).setCellValue((rowNum+1)+":"+(columnNum+1)); } } ByteArrayOutputStream out = new ByteArrayOutputStream(); workbook.write(out); byte[] bytes = out.toByteArray(); // 回写HTTP头部 response.setContentType("application/x-msdownload"); response.setContentLength(bytes.length); response.setHeader("Content-Disposition", "attachment;filename=" + filename); response.getOutputStream().write(bytes); } catch (IOException e) { logger.error("导出excel异常"); } }