java导出功能response.setHeader("Content-disposition...先运行js脚本,在线等

<script type="text/javascript">

jQuery.fn.rowspan = function(colIdx) { //封装的一个JQuery小插件
return this.each(function(){
var that;
$('tr', this).each(function(row) {
$('td:eq('+colIdx+')', this).filter(':visible').each(function(col) {
if (that!=null && $(this).html() == $(that).html()) {
rowspan = $(that).attr("rowSpan");
if (rowspan == undefined) {
$(that).attr("rowSpan",1);
rowspan = $(that).attr("rowSpan"); }
rowspan = Number(rowspan)+1;
$(this).hide();
$(that).attr("rowSpan",rowspan+1);
} else {
that = this;
}
});
});
});
}
$(function(){
alert("aa");
$("#tb_list").rowspan(0);
$("#tb_list").rowspan(1);
$("#tb_list").rowspan(3);
$("#tb_list2").rowspan(0);
$("#tb_list2").rowspan(1);
$("#tb_list2").rowspan(3);
<%
response.setHeader("Content-disposition","attachment; filename=信用等级报告.xls");
%>
});

</script>

你似乎弄错了 HTTP 流程,怎么可以在已经开始输出资料到 Response 的 OutputStream /Writer 之后再来 response.setHeader() 呢,这会得到 IllegalStateException 无效状态错误。

出现在 JSP 中的非 <% %> 内的内容相当于 out.println(); 输出的。因此我们要么在最开始(前面连一个空格都没有)的位置<% %> 中准备 Header 内容。

Header 应该在准备写出实际内容之前完成,因为 out.println() 或 JSP 中的 HTML/CSS/JS 都是 Body 的内容, Header 应该在 Body 之前完成。HTTP 通信的过程是先是 URL 请求和状态码,然后是各种Header,再是一个空行隔开,再是BODY内容。这里说的 Body 不是指<body> 标签,连 <head> 标签都是 HTTP Body 的内容。

另外要知道 <% %> 的代码在服务器就已经计算后固定下来再送到客户端浏览器的,所以你在 js 运行的时候 <% %> 计算的任何文本值已经确定了,因为 js 是运行在客户端浏览器中的,这个时刻已经与服务器没有任何关系了。

如果你想下载这个文件的话,这个 Content-disposition 应该是由服务器来填充的,要知道在 js 中只是计算文件下载的 URL,真实的下载过程是另外再开一个 请求的 (新的 HttpServletRequest) 。而我们的 js 只需要计算出来文件下载的 URL 之后 window.open(...) 打开这个URL ,浏览器就会自动的弹出下载。追问

那有什么解决方案,我要对table用jquery进行优化成

优化完在进行下载

追答

你这个所谓优化是指什么,数据本身会在优化的过程上改变?如果是这样,一种方法是把优化后的数据发送回服务器再打开下载页面重新下载修改后的数据。另一种方法弹出一个新的 html 窗口时也可以把数据传过去,这样用户把这个弹出来的 html 文件保存就可以了。想让这个数据直接从客户端浏览器中变成一个 Excel 格式似乎有点困难而且只能在 Windows 下使用,

追问

按正常的表格是一个个罗列出来,我通过js,把相同的上下列,把他们合并起来。

温馨提示:答案为网友推荐,仅供参考

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网