17

このページには、オブジェクトを ELFlash に配置し、page2.jsf にリダイレクトする commandButton があります。このページでは、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

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

この警告は、Ajax リクエストに Flash を使用している場合に発生する可能性があります。おそらく、ajax を true に設定してリダイレクトを実行しようとしており、リスナーで Flash に値を入れています。ajax が必要かどうかを確認し、リダイレクト用に false に設定します。

ajax=truecommandButtons と flash を混在させないでください。そうすれば、この警告から解放されます。

于 2018-10-30T12:41:10.897 に答える
-1

Flash という名前は、jsf のライフサイクル間の一種の一時的なコンテナの概念であることを示しているはずです。ポイントは次のとおりです。フラッシュに保存されたオブジェクトは、ユーザーが遭遇する次のビューでユーザーにプロモートされます (jsf は mvc に従うことに注意してください)。

それがこのようなエラーが発生する理由だと思いますが、それはモハラとは直接関係ありません。

于 2013-08-18T19:49:16.100 に答える