我對我的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