繁体   English   中英

richfaces 4 + jsf和faces-config.xml无法正常工作

[英]richfaces 4+jsf and faces-config.xml that doesn't work

我使用richfaces4。而且我有具有属性-用户的会话bean。 我希望如果用户为null,则我的xhtml页不会呈现请求,因为我有带有if-tag的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具有隐含的缺陷和乐观的态度,因为如您所见,绕过和破坏您的应用程序太容易了

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM