java学习|excel导出(使用window.open的post请求方式)

最近在做一个导出excel的功能,本来这个功能很简单,之前也做过没必要写,但是在做的时候发现一个问题,那就是传参参数过长的问题,听我细细道来。
【java学习|excel导出(使用window.open的post请求方式)】按理说导出是后台java做的事情,但是我这次是将前台的表格数据拼成json然后当做参数传到后台,具体方式是使用url将参数放到url中,那么问题来了,假如前台表格中的数据很多时,是用这种方式肯定会有问题,因为window.open 默认是使用get请求的方式来发送,我们知道get请求时,参数长度是有限制的,那么我们就得需要使用post的方式将参数传递过去。
下面我把前端 的代码粘贴出来:

//monitorSplashesExport 点击事件 $("#monitorSplashesExport").click(function(){ var tableDatahttps://www.it610.com/article/= ""; //表格数据中间用@@@隔开 var trList = $(".dataTables_scrollBody").find("table").find("thead").find("tr").children("th"); var theadArray = new Array(); for(var i=0; i

先把数据封装起来,形成theadArray和 tableData 再调用 doExport(theadArray, tableData) 方法。
下面把window.open 封装成 post方式
//将window.open修改为post请求方式 function doExport(theadArray, tableData){ var url = "${ctx}/instantMeasure.do?formAction=doExportExcel"; var tempForm = $("
"); tempForm.attr("id", "tempForm1"); tempForm.attr("style", "display:none"); tempForm.attr("target", name); tempForm.attr("method", "post"); tempForm.attr("action", url); var input1 = $(""); input1.attr("type", "hidden"); input1.attr("name", "theadArray"); input1.attr("value", theadArray); //表头数据 var input2 = $(""); input2.attr("type", "hidden"); input2.attr("name", "tableData"); input2.attr("value", tableData); //表格内容数据 tempForm.append(input1); tempForm.append(input2); tempForm.on("submit", function(){openWindow(name); }); // 必须用name不能只用url,否则无法传值到新页面 tempForm.trigger("submit"); $("body").append(tempForm); //将表单放置在web中 tempForm.submit(); $("tempForm1").remove(); } function openWindow(name){ window.open(name, "_self"); }

然后后端java代码如下:
else if("doExportExcel".equals(action)){ OutputStream os = null; WritableWorkbook wbook = null; try{ String theadArray = request.getParameter("theadArray"); String[] tHead = theadArray.split(","); String tableData = https://www.it610.com/article/request.getParameter("tableData"); String[] tBody = tableData.split("@@@"); os = response.getOutputStream(); // 取得输出流 response.reset(); // 清空输出流 response.setHeader("Content-disposition", "attachment; filename=testRed.xls"); // 设定输出文件头 response.setContentType("application/msexcel"); // 定义输出类型wbook = Workbook.createWorkbook(os); // 建立excel文件 String tmptitle = "散点详情"; // 标题 WritableSheet wsheet = wbook.createSheet(tmptitle, 0); // sheet名称// 设置excel标题 WritableFont wfont = new WritableFont(WritableFont.ARIAL, 16, WritableFont.BOLD, false, UnderlineStyle.NO_UNDERLINE, Colour.BLACK); WritableCellFormat wcfFC = new WritableCellFormat(wfont); wcfFC.setBackground(Colour.AQUA); wsheet.addCell(new Label(1, 0, tmptitle, wcfFC)); wfont = new jxl.write.WritableFont(WritableFont.ARIAL, 14, WritableFont.BOLD, false, UnderlineStyle.NO_UNDERLINE, Colour.BLACK); wcfFC = new WritableCellFormat(wfont); int count = 0; // // 开始生成主体内容 //表头从第二行开始 //表头 for(int i=0; i

不积跬步无以至千里
不积小流无以成江海

    推荐阅读