zoukankan      html  css  js  c++  java
  • 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以便使过滤器直接把内容写到输出流中,这可以使响应速度更快并且使用更少的内存,但是内容的长度不会被设置。在这里我们不设置这个参数。

    测试过了,可以导出了.

  • 相关阅读:
    vue父组件促发子组件中的方法
    油猴脚本:油猴脚本自动点击 | 自动检测元素并点击、休眠、顺序执行、单页面也适用
    油猴脚本:使用layer.js mobx lodash jquery
    vue项目统计src目录下代码行数
    常用mobx响应新值变化函数autorun和observe
    uni app使用mobx | uni app状态管理mobx
    File and Code Templates | webstorm代码文件模板 vue typescript
    javascript立即执行函数简单介绍
    VSCode 安装GitLens插件不生效问题
    常用的浅拷贝实现方法
  • 原文地址:https://www.cnblogs.com/seniortestingdev/p/2499489.html
Copyright © 2011-2022 走看看