FacesContext
インスタンスはスレッドごとに一意であり、 は を取得しながらリクエストの開始時に をFacesServlet
作成します(これは のコントラクトで あり、HTTP サーブレット リクエストに関連付けられた応答の最後で ( を呼び出すことにより) 削除します)。ThreadLocal<FacesContext>
FacesContext
FacesContextFactory#getFacesContext)
FacesContext#release
JSF コードでa を実行するFacesContext#getCurrentInstance()
と、HTTP サーブレットの要求/応答処理全体で常に同じインスタンスが取得されます。
メソッドについては、メソッドUIViewRoot#processDecodes
が渡されたインスタンスではなく、独自に作成されたインスタンスを使用していることを示す可能性のある行は実際にはありません。そう思わせたセリフは?
からFacesServlet#service
を作成するメソッドで見ることができます。これを示すメソッドからの抜粋を次に示します-FacesContext
FacesContextFactory
FacesServlet#service
// Acquire the FacesContext instance for this request
FacesContext context = facesContextFactory.getFacesContext
(servletConfig.getServletContext(), request, response, lifecycle);
// Execute the request processing lifecycle for this request
try {
...
} catch (FacesException e) {
...
}
finally {
// Release the FacesContext instance for this request
context.release();
}
これを考えると、からではないインスタンスをUIViewRoot#processDecodes
持つことはできないと思います。FacesContext
FacesContextFactory
あなたが言っているので -FacesContext
から返されるいくつかの追加パラメータを に設定しましたFacesContextFactory
。つまり、 の独自のカスタム実装があることを意味します。FacesContextFactory
この場合、インスタンスがFacesServlet
mojarra ではなくに注入されていることを確認していますcom.sun.faces.context.FacesContextFactoryImpl
か?あなたはmojarraを使用していますか)?