2012-04-11 1 views
0

似たような質問がありましたが、私は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)

私はRESTORE_VIEW相が、どういうわけか、私は私がリクエストのライフサイクルをトレースする以外に、この理論を支えるために何を持っていないのに...

は何かがあり、デフォルトの変数をリセットしている疑いがある

Servlet FilterからSessionScopedマネージドBeanの変数を変更するときに注意する必要がありますか?私のアプローチに何か間違っていますか?

答えて

1

なく、あなたの問題に対する答えが、あなたはそれらのパラメータを渡すためにJSF 2、より良い方法を使用しているため、使用している:

<f:viewParam name="vm" value="userInfoView.viewMode"/> 
+0

私は、このオプションを見てみましょう。それは、私が知っているより良い方法かもしれません(BeanのgetViewModeで要求パラメータを直接取得すること – JScoobyCed

関連する問題