关于poi导出Excel的问题。

花含 2013-11-12 09:39:23
现在在做Excel的导出功能,我看了网上的论坛,都是用poi和jxl做的,综合比较了一下选择了poi,但是在导出demo这一块,我直接访问页面可以弹出下载框,如果结果struts2的返回跳转到该页面,则没有任何反应,有些小晕,请高手指点错误出在哪里。现在贴出代码:



<%@ page language="java" import="java.util.*" pageEncoding="UTF-8" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@ page contentType="application/vnd.ms-excel" language="java"
import="java.util.*,com.Export"%>
<%
response.setHeader("Content-Disposition","attachment;filename=exportdata.xls");
response.setContentType("application/vnd.ms-excel");
Export ex = new Export();
ex.buildStudentExcel("exportdata.xls",response.getOutputStream());
%>
<%
out.clear();
out=pageContext.pushBody();
%>


上面的是jsp中的代码,直接访问能弹出下载框



<action name="expExcel" class="measureAction" method="expExcel" >
<result name="success" >/auditcheck/measure/123.jsp</result>
</action>

这是struts2中的配置,请求成功后跳到上面的jsp页面,后台执行了,但是没有弹出下载框,请问哪里出现问题了?
...全文
280 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
花含 2013-11-14
  • 打赏
  • 举报
回复
引用 16 楼 nicholasbobo 的回复:
response.setHeader("Content-Disposition","attachment;filename=exportdata.xls"); response.setContentType("application/vnd.ms-excel"); 这两句应该写到你的action的方法里
谢谢各位哈,现将解决办法粘出来跟大家分享一下: struts配置改成了如下配置:


<!-- 导出excel -->
         <action name="expExcel" class="measureAction" method="ExcelExport" >
			<result name="excel" type="stream">
			    <param name="contentType">application/vnd.ms-excel</param>
			    <param name="contentDisposition">attachment;filename="${downloadFileName}"</param>
			    <param name="inputName">excelFile</param>
			</result>

遇到的问题: jsp页面原来一直弹不出保存框,排除了各种原因,最后发现了,在执行这个请求的时候,不能用ajax请求,即$.post(uri),这种就是出不来,同样的代码,jsp用form表单请求和<a href="">a标签请求都能出来,具体原因我也说不清楚,问题就出在这里了
花含 2013-11-14
  • 打赏
  • 举报
回复
引用 6 楼 AA5279AA 的回复:
[quote=引用 5 楼 lijibo503 的回复:] [quote=引用 2 楼 AA5279AA 的回复:] 我记得以前遇到一个算是类似的问题吧,如果这个改成action的话, 直接往返回流中写execl数据并且还有返回值的话,会出现一个异常-流冲突, 如果把返回值修改为null,就能正常返回execl表了。
不太明白,请问是把action中的返回值改为null嘛?如果action中的返回值改为null,struts2怎么知道要跳转到哪个页面呢?[/quote] 那么页面就不会跳转,而是直接返回一个execl报表。 如果想既跳转并且返回execl报表的话可以尝试两次请求。 我记得当初我错误的原因是生成一个out流,这个流与jsp自身的输出流冲突。 你先看看是不是这个原因,先找我说的试试,如果能返回execl表了再说。[/quote] 谢谢各位哈,现将解决办法粘出来跟大家分享一下: struts配置改成了如下配置:


<!-- 导出excel -->
         <action name="expExcel" class="measureAction" method="ExcelExport" >
			<result name="excel" type="stream">
			    <param name="contentType">application/vnd.ms-excel</param>
			    <param name="contentDisposition">attachment;filename="${downloadFileName}"</param>
			    <param name="inputName">excelFile</param>
			</result>

遇到的问题: jsp页面原来一直弹不出保存框,排除了各种原因,最后发现了,在执行这个请求的时候,不能用ajax请求,即$.post(uri),这种就是出不来,同样的代码,jsp用form表单请求和<a href="">a标签请求都能出来,具体原因我也说不清楚,问题就出在这里了
花含 2013-11-14
  • 打赏
  • 举报
回复
引用 16 楼 nicholasbobo 的回复:
response.setHeader("Content-Disposition","attachment;filename=exportdata.xls"); response.setContentType("application/vnd.ms-excel"); 这两句应该写到你的action的方法里
不是这个原因。
花含 2013-11-12
  • 打赏
  • 举报
回复
引用 6 楼 AA5279AA 的回复:
[quote=引用 5 楼 lijibo503 的回复:] [quote=引用 2 楼 AA5279AA 的回复:] 我记得以前遇到一个算是类似的问题吧,如果这个改成action的话, 直接往返回流中写execl数据并且还有返回值的话,会出现一个异常-流冲突, 如果把返回值修改为null,就能正常返回execl表了。
不太明白,请问是把action中的返回值改为null嘛?如果action中的返回值改为null,struts2怎么知道要跳转到哪个页面呢?[/quote] 那么页面就不会跳转,而是直接返回一个execl报表。 如果想既跳转并且返回execl报表的话可以尝试两次请求。 我记得当初我错误的原因是生成一个out流,这个流与jsp自身的输出流冲突。 你先看看是不是这个原因,先找我说的试试,如果能返回execl表了再说。[/quote] 我的做法: 1:先经过一个action去数据库中查到了要导出的数据。把数据封装到session中 2:action执行成功后,通过struts2跳到一个jsp页面,在该页面获取session中的数据。设置头信息。 调用写入数据到excel文件的方法。 现在的结果是:写数据到excel的方法走了(我打断点跟了),但是前台页面没有弹出保存框,所以我也不知道这数据写哪里去了。
花含 2013-11-12
  • 打赏
  • 举报
回复
引用 7 楼 cheng417905 的回复:
你是怎么确定成功跳转到这个页面的,你弹出框是怎么写的,有js错误吗?
后台没报错误,也没有js错误。
花含 2013-11-12
  • 打赏
  • 举报
回复
引用 9 楼 cheng417905 的回复:
class="measureAction" 这个是不是要写包全名啊
是写数据那个方法走了,所以我肯定是跳转成功了,而且数据肯定也写进了excel,这我打断点跟过了,只不过执行完写数据就没反应了,没有弹出保存框。
  • 打赏
  • 举报
回复
class="measureAction" 这个是不是要写包全名啊
  • 打赏
  • 举报
回复
我你这是struts2的问题 不是poi的问题
  • 打赏
  • 举报
回复
你是怎么确定成功跳转到这个页面的,你弹出框是怎么写的,有js错误吗?
失落夏天 2013-11-12
  • 打赏
  • 举报
回复
引用 5 楼 lijibo503 的回复:
[quote=引用 2 楼 AA5279AA 的回复:] 我记得以前遇到一个算是类似的问题吧,如果这个改成action的话, 直接往返回流中写execl数据并且还有返回值的话,会出现一个异常-流冲突, 如果把返回值修改为null,就能正常返回execl表了。
不太明白,请问是把action中的返回值改为null嘛?如果action中的返回值改为null,struts2怎么知道要跳转到哪个页面呢?[/quote] 那么页面就不会跳转,而是直接返回一个execl报表。 如果想既跳转并且返回execl报表的话可以尝试两次请求。 我记得当初我错误的原因是生成一个out流,这个流与jsp自身的输出流冲突。 你先看看是不是这个原因,先找我说的试试,如果能返回execl表了再说。
花含 2013-11-12
  • 打赏
  • 举报
回复
引用 2 楼 AA5279AA 的回复:
我记得以前遇到一个算是类似的问题吧,如果这个改成action的话, 直接往返回流中写execl数据并且还有返回值的话,会出现一个异常-流冲突, 如果把返回值修改为null,就能正常返回execl表了。
不太明白,请问是把action中的返回值改为null嘛?如果action中的返回值改为null,struts2怎么知道要跳转到哪个页面呢?
别闹腰不好 2013-11-12
  • 打赏
  • 举报
回复
有道理,学习了,那JSP要怎么处理
OhSunshineJava 2013-11-12
  • 打赏
  • 举报
回复
推荐pageoffice 很强大的一款插件,轻松实现office编辑打印导出
失落夏天 2013-11-12
  • 打赏
  • 举报
回复
我记得以前遇到一个算是类似的问题吧,如果这个改成action的话, 直接往返回流中写execl数据并且还有返回值的话,会出现一个异常-流冲突, 如果把返回值修改为null,就能正常返回execl表了。
tony4geek 2013-11-12
  • 打赏
  • 举报
回复
nicholasbobo 2013-11-12
  • 打赏
  • 举报
回复
response.setHeader("Content-Disposition","attachment;filename=exportdata.xls"); response.setContentType("application/vnd.ms-excel"); 这两句应该写到你的action的方法里
花含 2013-11-12
  • 打赏
  • 举报
回复
引用 14 楼 nicholasbobo 的回复:
数据写完,记得关闭输出流,不然页面不会有反应


	try {
			out.flush();
			wb.write(out);
			out.close();		

		} catch (IOException e) {
			e.printStackTrace();
			System.out.println("Out  is  closed ");
		}
已经关流了
nicholasbobo 2013-11-12
  • 打赏
  • 举报
回复
数据写完,记得关闭输出流,不然页面不会有反应
咖啡加糖_ 2013-11-12
  • 打赏
  • 举报
回复
POI生成excel弹出框是response出来的,那么你的struts不需要做任何的跳转

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧