Afficher message de réussite et ensuite rediriger vers une autre page après un délai d'attente à l'aide de PageFlow
Comment puis-je afficher un message de réussite et puis rediriger l'utilisateur vers une autre page après un délai d'attente de par exemple 5 secondes?
J'en ai besoin pour la page de connexion après une connexion réussie. J'ai essayé ce qui suit, et je peux voir le message d'avertissement sur les échecs de connexion, mais pas le message de réussite lors de la connexion de succès. Il montre immédiatement la page cible.
public String check(){
if (username.equals("test") && password.equals("test")) {
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO,"Sample info message", "PrimeFaces rocks!"));
return "Success";
}else{
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_WARN,"Sample warn message", "Watch out for PrimeFaces!"));
return "Failure";
}
}
Je suis en utilisant la Couture du PageFlow pour la navigation.
J'ai un
<p:messages id="messages" showDetail="true" autoUpdate="true" closable="true" />
sur la page de connexion.
OriginalL'auteur Holysh | 2013-04-04
Vous devez vous connecter pour publier un commentaire.
Tout d'abord, avec le code que vous avez posté, vous ne verrez pas le FacesMessage avant la redirection, vous le verrez après la redirection. Mais aussi, afin de faire que cela se produise, vous aurez besoin d'ajouter un filtre, car les messages sont perdus lorsque vous rediriger. C'est le code pour le filtre dont vous avez besoin (n'oubliez pas de les déclarer dans le web.xml):
Si cela ne fonctionne pas pour vous, et vous devez montrer que le message d'avant, alors vous aurez à quelque chose comme ce qui suit: faire de la méthode de retour void, de l'appeler par ajax, et après l'ajout du message de succès appelle méthode javascript qui va attendre quelques secondes, et puis faire de la redirection (peut-être par programmation, en cliquant sur un bouton caché qui redirige vers la page suivante).
À mon avis, ce n'est pas la peine, vous serez juste de retarder le processus de connexion. De toute façon utilisateur saura tha tlogin réussi, parce qu'il va être rediriger vers la page d'accueil (ou quelle que soit la page que vous lui envoyez à l')
EDIT:
les messages sont affichées dans la page lorsque la méthode de finitions, afin d'attente dans le managed bean méthode ne fonctionnera pas. après l'ajout de la FacesMessage, utilisez
Et dans votre xhtml, vous aurez besoin d'avoir une fonction javascript similaire à ceci:
où hiddenButtonId est l'ID d'un p:bouton qui redirige vers la page d'accueil et est caché (display:none)
Mais encore une fois, c'est un méchant approche, à mon avis il n'y a pas besoin de faire cela, vous aurez juste retarder le processus de connexion.
Notez que c'est un JSF 1.x solution ciblée. Dans JSF 2.x il y a beaucoup plus agréable l'utilisation du flash la portée.
J'ai édité la réponse à expliquer sur la façon de faire apparaître le message AVANT de le rediriger.
OriginalL'auteur Damian
Il est l'un des utilitaires de Flash. Au lieu de
simplement utiliser ce code
setRedirect()
appel est inutile. Veuillez noter que le message apparaîtra dans la page cible et donc de l'OP doit avoir un<p:messages>
là-bas.Salut @BalusC j'ai été en attente de votre réponse 🙂 oui, il fonctionne avec mon code et aussi avec le code fourni par l'utilisateur... , mais le problème est de savoir comment puis-je afficher le message avant la redirection, puis après 5 secondes, par exemple rediriger vers une autre page
Salut Balus, ce qui est exactement l'utilité de setRedirect?
l'affichage d'un message pendant 5 secondes n'est pas ergonomique peut-être parce que l'utilisateur ne verra pas le message ou il va les déchets de 5 secondes.
OriginalL'auteur user1643352
vous ne pouvez pas déclarer MultiPageMessagesSupport dans le web.xml vous devez déclarer MultiPageMessagesSupport dans le faces-config.xml. por exemple:
OriginalL'auteur Felipe