0

私はrichfaces 4を使用しています。そして、プロパティ-ユーザーを持つセッションBeanを持っています。if-tag を使用した faces-config.xml があるため、ユーザーが null の場合、xhtml ページがリクエストに対してレンダリングされないことが予想されます (以下を参照)。しかし、それらはレンダリングされ (url myComp:8080/JSF/faces/clients.xhtml と入力したとき)、セッション Bean でユーザー プロパティがチェックされていないことがデバッガーに表示されます。

顔-config.xml

<navigation-rule>
  <from-view-id>/login.xhtml</from-view-id>
      <navigation-case>
       <from-outcome>clients</from-outcome>
       <if>#{userBean.isUser}</if>
       <to-view-id>/clients.xhtml</to-view-id>
      </navigation-case>

VeiwHandler が必要か、faces-config.xml に何か問題がありますか?

4

1 に答える 1

0

実際に から にナビゲートしていないため、明らかに機能しませ/login.xhtml/clients.xhtmlか? ナビゲーション ルールを評価するには、実際にオンにしlogin.xhtmlてから、そのページのコントロールで に移動する必要がありますclients.xhtml

ナビゲーション ケースは、特定のナビゲーション ケース、つまり if-then-else ロジックをカバーします。したがって、結果に直行すると、ナビゲーション ロジックが完全に脇に追いやられます。そのため、宛先で検証を実装する方がよいでしょう。に基づいて、次のような<f:event name="preRenderView"/>ものclients.xhtml:

  1. 以下を に追加しますclients.xhtml。方法を規定している.checkValidUser

    <f:metadata>
       <f:event  type="preRenderView" listener="#{myBean.checkValidUser}">
    </f:metadata>
    
  2. バッキング Bean で、次を追加します。

    @ManagedProperty("#{userBean}")
    UserBean theUserBean;    //this injects the UserBean into the destination bean. I'm assuming UserBean is a SessionScoped bean here
    
    public void checkValidUser(){
      if(userBean.isUser==false){
          throw new ValidationException("not a valid user");
      }
    }
    

@PostConstructまたは、注釈を追加してcheckValidUser(1) を完全に無視することもできます。基本的に同じ効果が得checkValidUserられ、Bean がインスタンス化された直後に実行されます。faces-config.xmlベースのナビゲーション アプローチである IMO は暗黙のうちに欠陥があり、楽観的です。

于 2013-04-08T15:20:12.327 に答える