RichFaces 4+JSF 和 Faces-config.xml 不起作用



我用的是richfaces。我有一个带有属性- user的会话bean。如果user为null,我希望我的xhtml页面不会为请求呈现,因为我有带有if标记的faces-config.xml(见下文)。但是它们呈现(就在我键入url myComp:8080/JSF/faces/clients.xhtml时),并且我在调试器中看到会话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的错误?

显然这行不通因为你并没有从/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中隐含着缺陷和乐观,因为正如您所看到的,它太容易被绕过并破坏您的应用程序

相关内容

  • 没有找到相关文章

最新更新