【问题标题】:Problems with Omnifaces GzipResponseFilter and page redirect (Glassfish only)Omnifaces GzipResponseFilter 和页面重定向的问题(仅限 Glassfish)
【发布时间】:2014-02-23 00:53:18
【问题描述】:

当我使用 Omnifaces GzipResponseFilter(仅在 Glassfish 中)时尝试使用 h:commandLink 在 JSF 操作中重定向页面时出现错误。

异常:java.lang.IllegalStateException:当前状态 = FLUSHED,新状态 = CODING_END

环境 玻璃鱼 3 Omnifaces 1.7 (GzipResponseFilter) 莫哈拉 2.1.27 JDK 6

web.xml

<filter>
    <filter-name>gzipResponseFilter</filter-name>
    <filter-class>org.omnifaces.filter.GzipResponseFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>gzipResponseFilter</filter-name>
    <url-pattern>/*</url-pattern>
    <dispatcher>REQUEST</dispatcher>
    <dispatcher>ERROR</dispatcher>
</filter-mapping>

MyBean.doAction()

Faces.redirect("anotherPage.jsf");

page.xhtml

<h:commandLink action="#{myBean.doAction()}">Click</h:commandLink>

这个问题只发生在 Glassfish 中,我在 Tomcat 中测试过,它可以工作。
如果我删除 GzipResponseFilter 声明,则重定向在两台服务器上都可以正常工作。

您知道这是 Omnifaces 上的错误还是我的代码中的错误? 提前致谢。

堆栈跟踪

java.lang.IllegalStateException: Current state = FLUSHED, new state = CODING_END
    at java.nio.charset.CharsetEncoder.throwIllegalStateException(CharsetEncoder.java:951)
    at java.nio.charset.CharsetEncoder.encode(CharsetEncoder.java:537)
    at sun.nio.cs.StreamEncoder.flushLeftoverChar(StreamEncoder.java:223)
    at sun.nio.cs.StreamEncoder.implClose(StreamEncoder.java:282)
    at sun.nio.cs.StreamEncoder.close(StreamEncoder.java:130)
    at java.io.OutputStreamWriter.close(OutputStreamWriter.java:216)
    at org.omnifaces.io.ResettableBufferedWriter.close(ResettableBufferedWriter.java:98)
    at java.io.PrintWriter.close(PrintWriter.java:295)
    at org.omnifaces.servlet.HttpServletResponseOutputWrapper.close(HttpServletResponseOutputWrapper.java:149)
    at org.omnifaces.servlet.GzipHttpServletResponse.close(GzipHttpServletResponse.java:133)
    at org.omnifaces.filter.GzipResponseFilter.doFilter(GzipResponseFilter.java:150)
    at org.omnifaces.filter.HttpFilter.doFilter(HttpFilter.java:77)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:256)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:217)

【问题讨论】:

  • 具体是哪个GF3版本?如果有的话,尝试过更新的吗?
  • 我使用的是 3.1.1 版本。我使用这个版本是因为这是我客户的环境。您如何看待这个问题?
  • 在omnifaces项目上打开一个关于它的问题更好吗?

标签: jsf redirect glassfish-3 omnifaces


【解决方案1】:

我们无法解决重定向问题,但是当我将“h:commandLink”与 f:ajax 一起使用时,Faces.redirect() 可以正常工作。 在常规“h:commandLink”、init 或 preRender 方法上调用 Faces.redirect() 失败。 我将打开一个 Omnifaces 问题进行讨论。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-21
    • 2020-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-18
    相关资源
    最近更新 更多