ajax + servlet + poi 导出Excel

来源:互联网 发布:世界未解之谜 知乎 编辑:程序博客网 时间:2024/06/01 10:57

js代码

$(document).ready(function(){$("#btn_export").click(function(){var area = $("#s-area option:selected").text();/ar b_s_num = $("#b_s_num option:selected").text();var bill_state = $("#bill_state option:selected").text();var remarks = $("#remarks option:selected").text();window.location.href="ExportConfirmBill";/*$.ajax({url:'ExportConfirmBill',type:'post',data:{'area':area,'bill_state':bill_state,'remarks':remarks},success:function(data){window.open('ExportConfirmBill');}})*/})});

后端servlet代码

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// TODO Auto-generated method stubresponse.setContentType("octets/stream");List<String> columns = new ArrayList<String>();List<Object> confirm_bill_lst = new ArrayList<Object>();String excelName = "账单信息";response.addHeader("Content-Disposition","attachment;filename=" + new String(excelName.getBytes("gb2312"), "ISO8859-1") + ".xls");ServletOutputStream out = response.getOutputStream();HSSFWorkbook wb = new HSSFWorkbook();HSSFSheet sheet = wb.createSheet();HSSFRow row1 = sheet.createRow(0);BillManage bm = new BillManageImpl();columns = bm.getColumns();for(int i=0;i<columns.size()-1;i++){HSSFCell cell =row1.createCell(i);cell.setCellValue(columns.get(i+1));}String area = request.getParameter("area");String bill_state = request.getParameter("bill_state");String remarks = request.getParameter("remarks");System.out.println(bill_state);confirm_bill_lst = bm.exportConfirmBill(area, bill_state, remarks);for(int i=0;i<confirm_bill_lst.size();i++){List<Object> lst =(List<Object>) confirm_bill_lst.get(i);HSSFRow row = sheet.createRow(i+1);for(int j=0;j<lst.size();j++){Cell cell = row.createCell(j);if(lst.get(j)==null){cell.setCellValue("");}else{cell.setCellValue(String.valueOf(lst.get(j)));}}}wb.write(out);out.close();wb.close();}
第一次,采用ajax的方式,发送请求并传递相应的参数时,后台获取了的数据并且利用POI接口类将数据填充到Excel,但是前台客户端并没有出现下载提示的窗口,导出Excel失败。

第二次,采用提交表单的方式,直接请求,导出成功。

经过百度,才知道

ajax返回的类型只有xml、text、json、HTML等类型,没有流类型,因此不会弹出下载提示框。