9
votes

Afficher le message de réussite puis rediriger vers une autre page après un délai d'attente en utilisant la pageFow

Comment puis-je afficher un message de réussite, puis rediriger l'utilisateur à une autre page après un délai d'expiration 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 la défaillance de la connexion, mais pas le message de réussite sur le succès de la connexion. Il montre immédiatement la page cible. P> xxx pré>

J'utilise la pageFrow pour la navigation. P>

J'ai un P>

<p:messages id="messages" showDetail="true" autoUpdate="true" closable="true" />


0 commentaires

3 Réponses :


7
votes

Tout d'abord, avec le code que vous avez posté, vous ne verrez pas la faciesMessage avant la redirection, vous le verrez après la redirection. Mais aussi, pour que cela se produise, vous devez ajouter un filtre, car les messages sont perdus lorsque vous redirigez. Ceci est le code du filtre dont vous avez besoin (n'oubliez pas de le déclarer dans web.xml): xxx pré>

Si cela ne fonctionne pas pour vous et que vous devez montrer le message Auparavant, vous devrez faire quelque chose comme ce qui suit: Faites de la méthode Retour NOID, d'appeler via AJAX et, après avoir ajouté le message de réussite, appelez une méthode JavaScript qui attendra quelques secondes, puis effectuer la redirection (peut-être par programme par programme Cliquez sur un bouton caché qui redirige vers la page suivante). À mon avis, cela ne vaut pas la peine, vous allez simplement retarder le processus de connexion. En tout cas, l'utilisateur saura que TLA Tlogin a réussi parce qu'il sera redirigé vers la page d'accueil (ou quelle que soit la page que vous l'envoyez) p>

EDIT: B> Les messages sont affichés dans la page lorsque la méthode se termine, l'attente de la méthode de haricot gérée ne fonctionnera pas. Après avoir ajouté la facesMessage, utilisez p> xxx pré>

et dans votre xhtml, vous devez avoir une fonction JavaScript similaire à celle-ci: p>

function waitAndRedirect() {
    setTimeout(function() {
        hiddenButtonId.click();
    }, 2000);
}


3 commentaires

Bonjour @damian, je travaille avec Ajax, j'ai essayé Thread.CurrentThread (). Dormir (5000); Il permet à la page en attente 5sec mais le message indique après la redirection, je veux juste que TTO montre le message avant la redirection avec cette méthode, merci !!


Notez qu'il s'agit d'une solution ciblée JSF 1.x. Dans JSF 2.x, il y a un moyen beaucoup plus agréable d'utiliser une portée flash.


@Holysh j'ai édité la réponse pour expliquer comment faire apparaître le message avant de rediriger.



17
votes

C'est l'un des utilitaires de Flash. Au lieu de

FacesContext facesContext = FacesContext.getCurrentInstance();
Flash flash = facesContext.getExternalContext().getFlash();
flash.setKeepMessages(true);
flash.setRedirect(true);
facesContext.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO,"Sample info message", "PrimeFaces rocks!"));


4 commentaires

L'appel SereDirect () est inutile. Veuillez noter que le message apparaîtra dans la page cible et que l'OP doit donc avoir un là-bas.


Salut @balusque j'attendais votre réponse :) Oui, il fonctionne avec mon code et avec le code fourni par l'utilisateur ..., mais le problème est comment puis-je afficher le message avant la redirection, puis après 5 secondec, par exemple la redirection vers une autre page


Bonjour Balus, quelle est l'utilité exacte de Seredirect?


@Holysh, affichant un message pendant 5 secondes n'est pas ergonomique car l'utilisateur ne verra peut-être pas le message ou il ne gaspillera 5 sectes.



1
votes

Vous ne pouvez pas déclarer multipapemessageSupport dans la web.xml, vous devez déclarer MultiPapemessageSupport dans les faces-config.xml. Par exemple: xxx


0 commentaires