似たような質問がありましたが、私はWebFilterからManagedBeanにアクセスできるので再ポストしたとは思わないが、更新しました。ここでは詳細は以下のとおりです。SessionScopedマネージドBeanの値がサーブレットフィルタから変更されていない
私は(Glassfishの3.1.2、WebFilter注釈にクロサギ科2.1.6を使用して)ことを行いフィルターがあります。
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リクエストセット(UserInfoView setViewModeを呼び出す)で "vm = 1"を持つviewModeを1にします
- にfaceletは、単にGlassfishのを再開して、適切な値を
を取得: - - GETリクエストSTILLセット(UserInfoView setViewModeを呼び出す)1
にビューモードで "= 1 VM" を有する
Faceletは--default **の値を取得します。 0)
は何かがあり、デフォルトの変数をリセットしている疑いがある
Servlet FilterからSessionScopedマネージドBeanの変数を変更するときに注意する必要がありますか?私のアプローチに何か間違っていますか?
私は、このオプションを見てみましょう。それは、私が知っているより良い方法かもしれません(BeanのgetViewModeで要求パラメータを直接取得すること – JScoobyCed