[英]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
上尝试以下操作:
将以下内容添加到您的clients.xhtml
。 它规定了一个方法checkValidUser
<f:metadata> <f:event type="preRenderView" listener="#{myBean.checkValidUser}"> </f:metadata>
在您的支持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.