同様の質問を見ましたが、WebFilterからManagedBeanにアクセスできるため、再投稿ではないと思いますが、奇妙なことに、更新されたプロパティは実際には更新されていません。詳細は次のとおりです。
私はそれを行うフィルターを持っています(Glassfish3.1.2のMojarra2.1.6、WebFilterアノテーションを使用):
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain)
throws IOException, ServletException {
// FacesContextHelper is a utility class to get some Faces stuff
FacesContextHelper facesContextHelper = new FacesContextHelper();
// this returns the correct instance of a SessionScoped ManagedBean
userInfoView = (UserInfoView) facesContextHelper.getManagedBean(request,
response, "userInfoView", UserInfoView.class);
// ... some computation here to get the 'vm' URL parameter
userInfoView.setViewMode(viewMode);
// ....
chain.doFilter(request, response);
}
今Faceletで、私はこれを使用していますviewMode
:
<h:panelGroup layout="block" rendered="#{userInfoView.viewMode ne 1}">
<ui:include src="/WEB-INF/jsf/v2/products.xhtml"/>
</h:panelGroup>
完全を期すために、ここに部分的なUserInfoViewがあります。
@ManagedBean(name = "userInfoView")
@SessionScoped
public class UserInfoView extends AbstractView
implements ServiceConstant, Serializable {
private Integer viewMode = 0;
public Integer getViewMode() {
return viewMode;
}
public void setViewMode(Integer viewMode) {
this.viewMode = viewMode;
}
}
ここで何が起こるかというと、何らかの理由で(JSESSIONIDにリンクされているようです)期待される動作が発生します:
-GETリクエストセットに「vm = 1」がある(UserInfoView setViewModeを呼び出す)viewModeを1
に設定-Faceletは適切な値
次に、Glassfishを再起動し、次のようにします。
-GETリクエストに「vm = 1」を含めると、 viewModeが1に設定されます(UserInfoView setViewModeを呼び出します)
。Faceletは--default **値(つまり0)を取得します。
RESTORE_VIEWフェーズでは、変数がデフォルトにリセットされるのではないかと思いますが、リクエストのライフサイクルを追跡する以外に、この理論をサポートするものはありません...
SessionScopedマネージドBeanの変数をサーブレットフィルターから変更するときに注意すべき点はありますか?私のアプローチに何か問題がありますか?