无法在显示标记中导出PDF,CSV,EXCEL

时间:2013-06-28 08:19:44

标签: jsp struts2 liferay portlet displaytag

我正在使用struts2,spring3,hibernate作为我的Liferay portlat应用程序。

我使用Display Tag 1.2版本并下载displaytag-portlet,displaytag,displaytag-export-poi。

我还创建了displaytag.properties文件,并在其中添加了以下行。

factory.requestHelper=org.displaytag.portlet.PortletRequestHelperFactory.

一切运行良好。分页,显示,排序都运行良好。但如果我在<display:table>中加上 export =“true”,则会显示转换为pdf,csv,Excel,rtc的链接。

但是当我点击任何像CSV这样的链接时,它会给我一个错误。

  

08:15:32,191 ERROR [http-bio-8080-exec-17] [render_portlet_jsp:154]例外:[。TabTag]无法在返回导出数据之前重置响应。您没有使用导出过滤器。确保在display:table之前没有使用其他jsp标记,或者参考displaytag文档,了解如何配置导出过滤器(需要j2ee 1.3)。       在org.displaytag.tags.TableTag.writeExport(TableTag.java:1538)       在org.displaytag.tags.TableTag.doExport(TableTag.java:1454)       at org.displaytag.tags.TableTag.doEndTag(TableTag.java:1309)       在org.apache.jsp.pages.pim.employee.searchEmployee_jsp._jspService(searchEmployee_jsp.java:509)       在org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)

这是什么解决方案?

我还在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>   

2 个答案:

答案 0 :(得分:1)

我能想到两种解决方案

  1. Andrea说的话 在web.xml

    中添加之前 struts2过滤器中的代码
    <filter>
      <filter-name>ResponseOverrideFilter</filter-name>
      <filter-class>org.displaytag.filter.ResponseOverrideFilter</filter-class>
    </filter>
    
  2. 如果您使用多个表,请增加JSP的页面缓冲区大小

     <%@ page buffer = "16kb" %>
    
  3. 您可以尝试将缓冲区大小增加到32kb或64kb并检查它是否有效。

答案 1 :(得分:0)

错误可能在web.xml中你没有写过的部分。

我猜你可能已宣布

  • Struts2 StrutsPrepareAndExecuteFilter (或 FilterDispatcher ,如果S2版本<2.1.x)
  • DisplayTag ResponseOverrideFilter

在这种情况下,订单错误,您需要在Struts2过滤器之前简单地将DisplayTag过滤器 放在 之前。