我对我的facelets有个问题:JSF Facelets渲染问题
我收缩了一个导航部件,显示关于curren用户和注销按钮的登录信息。登录正常工作。但是在用户注销后,导航部分我的页面显示
Welcome, User (role) [Logout_Button]
然而,我要的是,当你第一次发生在登录同样的事情:
Welcome, Guest
(谢谢你的那些简单单词的Java饮酒:-))
在这里你可以看到我的模板的一部分:
<div id="metaContainer">
<ui:include src="/metaMenu.xhtml" />
</div>
这就是我的登录信息(称为metaMenu.xhtml)导航部分:
<ui:composition xmlns="http://www.w3.org/1999/xhtml" lang="en"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:f="http://java.sun.com/jsf/core">
<div id="login_info">
<h:outputLabel value="Willkommen, "/>
<h:outputLabel class="principal" value="#{metaNavData.principal}"/>
<h:outputLabel value="#{metaNavData.role}"/>
</div>
<div id="meta_nav">
<h:form name="loginform" rendered="#{authorisation.authenticated}">
<h:commandLink action="#{loginController.logout}" rendered="#{authorisation.authenticated}">
Logout</h:commandLink>
</h:form>
</div>
</ui:composition>
由于BalusC和Java酒徒认为这可能是一个Java的逻辑问题。我首先需要说的是,我使用Apache Shiro来解决安全问题。因此,这里是相关的Java代码:
我的LoginController包含注销方法:
@ManagedBean
@SessionScoped //Mistake!!! That should be RequestScoped, see below
public class LoginController {
private Subject currentUser; // import org.apache.shiro.subject.*;
public LoginController() {
currentUser = SecurityUtils.getSubject();
}
public String logout() {
if (currentUser.isAuthenticated()) {
currentUser.logout();
}
return "welcome.xhtml";
}
而她,你可以看到我的支持豆“授权”,这是应该提供的信息可用于隐藏像loginbutton comonents:
@ManagedBean
@RequestScoped
public class Authorisation {
private Subject currentUser;
public Authorisation(){
currentUser = SecurityUtils.getSubject();
}
public boolean getAuthenticated(){
return currentUser.isAuthenticated();
}
我不知道我明白。你是说 ...部分在用户注销后不显示? –
2010-08-09 13:10:41
对不起,我真的不知道这个问题。我认为你正在使用的“渲染”这个词含糊不清。你不是有条件地渲染代码示例的login_info div中的任何地方,但是你在问题描述中是这样说的。我认为你*实际上*意思是“显示值”或“返回值”,你说的“渲染”。这反过来不是渲染问题,而是模型/代码逻辑问题。 – BalusC 2010-08-09 16:44:52
抱歉让人困惑的话。我的技术术语有时不是正确的。但我会改善! Thx阅读和帮助 – Sven 2010-08-10 06:46:50