我使用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的错误?
答案 0 :(得分:0)
很明显,它不起作用,因为你实际上并没有从/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>
@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");
}
}
在您的支持bean中,添加以下内容
@PostConstruct
或者,您可以将checkValidUser
注释添加到checkValidUser
并完全忽略(1)。它将实现基本相同的效果,{{1}}将在实例化bean之后立即运行。基于 faces-config.xml 的导航方法,IMO存在隐含的缺陷和乐观,因为您可以看到它很容易绕过并破坏您的应用程序