0

同様の質問を見ましたが、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の変数をサーブレットフィルターから変更するときに注意すべき点はありますか?私のアプローチに何か問題がありますか?

4

1 に答える 1

1

問題の答えではありませんが、JSF 2を使用しているため、これらのパラメーターを渡すためのより良い方法は次を使用することです。

<f:viewParam name="vm" value="userInfoView.viewMode"/> 
于 2012-04-11T07:46:11.360 に答える