richfaces 4 + jsf和faces-config.xml不起作用

时间:2013-04-08 07:09:37

标签: java jsf richfaces

我使用richfaces 4.我有会话bean与属性 - 用户。如果用户为null,我希望我的xhtml页面不会为请求呈现,因为我有带有if-tag的faces-config.xml(见下文)。但是它们呈现(就在我输入url myComp:8080 / JSF / faces / clients.xhtml时),我在debuger中看到没有在会话bean中检查用户属性。

faces-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的错误?

1 个答案:

答案 0 :(得分:0)

很明显,它不起作用,因为你实际上并没有从/login.xhtml导航到/clients.xhtml吗?要评估导航规则,您需要实际使用login.xhtml,然后通过该页面上的控件导航到clients.xhtml

导航案例涵盖特定的导航案例,即if-then-else逻辑。因此,直接进入结果完全支持导航逻辑。这就是为什么你最好在目的地实施验证。基于<f:event name="preRenderView"/>的基于clients.xhtml的以下内容,请尝试以下clients.xhtml

  1. 将以下内容添加到checkValidUser。它规定了方法<f:metadata> <f:event type="preRenderView" listener="#{myBean.checkValidUser}"> </f:metadata>

    @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");
      }
    }
    
  2. 在您的支持bean中,添加以下内容

    @PostConstruct
  3. 或者,您可以将checkValidUser注释添加到checkValidUser并完全忽略(1)。它将实现基本相同的效果,{{1}}将在实例化bean之后立即运行。基于 faces-config.xml 的导航方法,IMO存在隐含的缺陷和乐观,因为您可以看到它很容易绕过并破坏您的应用程序