JSF, ajax auditeur
Je suis à essayer de comprendre comment déconnecter un utilisateur avec un f:ajax
appel à l'aide de JSF et un backing bean géré. Le problème que je rencontre est que je ne peux pas tout à fait comprendre pourquoi l'ordre d'appel pour l'Ajax auditeur et les rerender du formulaire de connexion.
Ci-dessous est la très simplifié code. L'idée de base du code est ce
if (uid != null) {
//show log out
} else {
//show log in
}
Je suis clairement pas à comprendre quelque chose sur la façon de l'ajax d'auditeurs et de la forme rerender est fait.
La JSF page
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:c="http://java.sun.com/jsp/jstl/core">
<h:head>
<title>Facelet Title</title>
</h:head>
<h:body>
<f:view>
<h:form id="loginForm">
<c:choose>
<c:when test="${userBean.uid != null}">
<span>Hi, #{userBean.uid}</span>
<h:commandButton value="Logout">
<f:ajax event="click" listener="#{userBean.logout}" render="loginForm"/>
</h:commandButton>
</c:when>
<c:otherwise>
<span>User name: </span>
<h:inputText value="#{userBean.uid}" id="uid" />
<h:commandButton value="Login" action="#{userBean.login}" />
</c:otherwise>
</c:choose>
</h:form>
</f:view>
</h:body>
</html>
Le Haricot
package test.auth;
import java.io.Serializable;
import javax.inject.Named;
import javax.enterprise.context.SessionScoped;
import javax.faces.event.AjaxBehaviorEvent;
@Named(value="userBean")
@SessionScoped
public class UserBean
implements Serializable
{
private static final long serialVersionUID = -4292770567982457272L;
private String uid;
/** Creates a new instance of UserBean */
public UserBean() {
}
public String getUid()
{
return uid;
}
public void setUid(String uid)
{
this.uid = uid;
}
public String login () {
return "faces/index.xhtml";
}
public void logout (AjaxBehaviorEvent event) {
this.uid = null;
}
}
Le problème avec le code, c'est que lorsque vous cliquez sur logout
la forme de la recharge, mais il est toujours dans le consignés dans l'état même si le uid
a été mis à null
. J'ai vérifié cela avec le débogueur. Alors, comment puis-je faire le rendu seront exécutées qu'APRÈS l'ajax? auditeur
OriginalL'auteur Matti Lyra | 2011-02-18
Vous devez vous connecter pour publier un commentaire.
Les balises JSTL sont exécutées pendant la construction, non pas pendant les temps de rendu. Au moment de l'ACI est la réutilisation de l'état d'affichage pour les rendre à nouveau, les balises JSTL de ne pas être ré-exécuté, tout simplement parce qu'ils ne sont plus là.
Vous souhaitez utiliser JSF
rendered
attribut de la place.Vous êtes les bienvenus.
OriginalL'auteur BalusC