J'ai un problème avec mes facelets:JSF Facelets problème de rendu
Je constriction une partie nav qui affiche les informations de connexion pour l'utilisateur courant et un bouton de déconnexion. La connexion fonctionne correctement. Mais après un utilisateur se déconnecte, la nav partie de ma page affiche
Welcome, User (role) [Logout_Button]
Alors, ce que je veux est la même chose qui se produit lorsque vous arrivez à la connexion la première fois:
Welcome, Guest
(Merci Java abreuvoir pour ces mots faciles :-))
ici vous pouvez voir une partie de mon modèle:
<div id="metaContainer">
<ui:include src="/metaMenu.xhtml" />
</div>
C'est ma part de nav avec login informations (appelé 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>
Comme BalusC et Java Buveur supposé qu'il pourrait être un problème de logique java. Je dois d'abord dire, que j'utilise Apache Shiro pour des problèmes de sécurité. Donc, voici le code Java correspondant:
mon loginController qui contient la méthode logout:
@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";
}
Et elle vous pouvez voir mon grain soutenu par « autorisation », qui est censé fournir des informations peut être utilisé pour cacher comonents comme le loginbutton:
@ManagedBean
@RequestScoped
public class Authorisation {
private Subject currentUser;
public Authorisation(){
currentUser = SecurityUtils.getSubject();
}
public boolean getAuthenticated(){
return currentUser.isAuthenticated();
}
Je ne suis pas sûr de comprendre. Voulez-vous dire que la partie ... ne s'affiche pas une fois que l'utilisateur est déconnecté? –
Désolé, je n'ai vraiment pas le problème. Je pense qu'il y a une ambiguïté dans le mot «render» que vous utilisez. Vous ne pouvez pas effectuer de rendu conditionnel dans la div de login_info de l'exemple de code, mais vous le dites dans la description du problème. Je pense que vous * signifiiez en fait "valeur affichée" ou "valeur renvoyée" lorsque vous avez dit "rendu". Ce n'est pas un problème de rendu, mais un problème de modèle/code-logique. – BalusC
désolé pour les mots confus. mes termes techniques ne sont parfois pas les bons. mais je vais m'améliorer! Merci de lire et de votre aide – Sven