struts2标签与displaytag标签同时使用时列表不能导出数据(转)

简介:

原文地址:http://awfrun.iteye.com/blog/811517

最近要做一个新的项目,基本框架是struts2 + hibernate3.2 + spring2.5 。这几天就架构系统,全部都重新整理一下。后台列表的显示用开源的displaytag. 今天在做整合时发现,当页面使用了<s:select ...> 时,displaytag的导出功能就不能使用了,异常堆栈信息:

Exception: [.TableTag] Unable to reset response before returning exported data. You are not using an export filter. Be sure that no other jsp tags are used before display:table or refer to the displaytag documentation on how to configure the export filter (requires j2ee 1.3).

原因:未使用displaytag的导出过滤器(org.displaytag.filter.ResponseOverrideFilter),不过这在通常情况下并不会导致问题,但是如果在JSP的页面中使用了其它框架的标签(诸如Struts),而非常巧合的是在这些标签的处理过程中又恰好调用了ServletResponse.flushBuffer()等可以导致提交响应(即导致ServletResponse.isCommit()返回true)的方法,这个问题就会出现。

解决方案:配置Displaytag的导出过滤器(web.xml)。

<filter>  
      <filter-name>ResponseOverrideFilter</filter-name>  
      <filter-class>org.displaytag.filter.ResponseOverrideFilter</filter-class>  
  </filter>  

<filter-mapping>  
      <filter-name>ResponseOverrideFilter</filter-name>  
      <url-pattern>*.action</url-pattern>  
</filter-mapping>  
<filter-mapping>  
      <filter-name>ResponseOverrideFilter</filter-name>  
      <url-pattern>*.jsp</url-pattern>  
</filter-mapping>  

默认情况下此过滤器在把导出内容写回响应之前会将这些内容进行缓存。我们也可以设置一个可选的参数(buffer)的值为false以便使过滤器直接把内容写到输出流中,这可以使响应速度更快并且使用更少的内存,但是内容的长度不会被设置。在这里我们不设置这个参数。

测试过了,可以导出了.


本文转自hcy's workbench博客园博客,原文链接:http://www.cnblogs.com/alterhu/archive/2012/05/14/2499489.html,如需转载请自行联系原作者。

目录
相关文章
|
7月前
|
移动开发 安全 搜索推荐
H5新增标签
H5新增标签
59 0
HTML教程6——列表标签
无序列表用<ul>标签表示,无序列表的每一项前默认都是用圆点标识,<ul>标签中比较重要的属性为type(列表前的符号),默认为disc(圆点),还有circle(空心圆),square(实心正方形),<ul>标签中只能有<li>标签,<li>标签的元素代表列表每一行的内容,<ul>标签中可以允许有任意个<li>标签。
HTML教程6——列表标签
|
容器
08 # 列表标签
08 # 列表标签
56 0
|
Java 开发者
自定义标签之SkipPageException —不再执行标签下面的内容 | 学习笔记
快速学习自定义标签之SkipPageException—不再执行标签下面的内容
120 0
自定义标签之SkipPageException —不再执行标签下面的内容 | 学习笔记
标签之美九——列表
标签之美九——列表
110 0
标签之美九——列表
|
Java 开发者
自定义标签之带有属性的标签 | 学习笔记
快速学习自定义标签之带有属性的标签
|
Web App开发
网页的文档类型、标签及表格
什么是文档类型? 可以简单的理解为不同的html版本 从html4.0或4.01以后数字版本号基本固定,但是在此基础上又有分化: 1.严格型:可用的标签相对较少,但能兼容更多的浏览器 2.宽松型:可用的标签相对较多,但能兼容的浏览器较少 3.框架型:一种特殊需要的类型,只能在frameset标签的网页中使用 从html5 开始就删去了啰嗦的东西就剩 链接标签 _blank 新的窗口(空白窗口) _self: 当前网页本身这个窗口 _parent: 当前窗口的“上一级”窗口 ——学frameset的时候才能应用上。
972 0