17

我有一个page1.jsf,在这个页面中我有一个commandButton,它将一个对象放入ELFlash,并重定向到page2.jsf。在此页面中,我通过 ELFlash 恢复对象。一切正常。但是,当用户留在 page2.jsf 中时,对于每个 ajax 请求,tomcat 都会显示以下警告消息:

20/07/2013 09:43:37 com.sun.faces.context.flash.ELFlash setCookie
WARNING: JSF1095: The response was already committed by the time we tried to set the outgoing cookie for the flash.  Any values stored to the flash will not be available on the next request.

它的真正含义是什么?

4

4 回答 4

11

除了使用@Rafal K 答案中提到的过滤器,您还可以通过在您的web.xml

<!-- increase buffer size to avoid JSF1095 errors -->
<context-param>
    <param-name>javax.faces.FACELETS_BUFFER_SIZE</param-name>
    <param-value>131072</param-value>
</context-param>

大小以字节为单位,应大于最大页面。您可以通过右键单击并选择 来轻松检查 Firefox 中页面的大小View Page Info

于 2017-07-24T15:41:53.420 回答
4

我认为这个问题可能与http分块有关。解决方案是增加响应缓冲区大小。之后,cookie 将被正确设置,Flash Scope 也应该可以工作。

使用此代码:

public class FlashScopeFixerFilter implements Filter {
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
    // Below line: response.getWriter() must be invoked to buffer size setting work. Just DO NOT touch this!
    response.getWriter();
    HttpServletResponseWrapper wrapper = new HttpServletResponseWrapper((HttpServletResponse) response);
    wrapper.setBufferSize(10000000);
    chain.doFilter(request, wrapper);
}

@Override
public void init(FilterConfig arg0) throws ServletException {}
@Override
public void destroy() {}
}

在 web.xml 中:

<filter>
    <filter-name>FlashScopeFixerFilter</filter-name>
    <filter-class>dk.sd.medarbejderdata.common.FlashScopeFixerFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>FlashScopeFixerFilter</filter-name>
    <url-pattern>*.xhtml</url-pattern>
</filter-mapping>
于 2014-02-14T15:40:12.340 回答
2

如果您将 Flash 用于 ajax 请求,则可能会出现此警告。可能您正在尝试将 ajax 设置为 true 并在侦听器中将值放入 Flash 中进行重定向。验证是否需要 ajax 并将其设置为 false 以进行重定向。

只是不要将ajax=truecommandButtons 与 flash 混合使用,您将不会收到此警告。

于 2018-10-30T12:41:10.897 回答
-1

Flash正如它的名字所暗示的那样,是一种介于jsf生命周期之间的临时容器概念。要点如下:存储在闪存中的对象将在用户将遇到的下一个视图中提升给用户(记住jsf遵循mvc),因此在“使用”后它会消失,即会被删除。

我认为这就是您收到此类错误的原因,这与 mojarra 没有直接关系。

于 2013-08-18T19:49:16.100 回答