2010-07-08 4 views
1

J'ai les 3 pages simples suivantes dans une application JSF.jsf - intercepter lorsque l'utilisateur quitte la page

index.html 
start.html 
confirmSuccess.thml 

start.html est une forme simple, avec un "GO!" bouton et un lien HTML vers index.html. Lorsque l'utilisateur clique sur GO! ça donne le coup de pied d'une transaction dans le backing bean. Si cela échoue, je veux redisplayed formulaire start.html, mais avec une erreur expliquant l'échec. J'ai donc un drapeau d'erreur dans mon bean backing, et l'affichage des erreurs est géré en utilisant l'attribut rendered = "".

Simple, non? Donc, comment puis-je gérer le cas où l'utilisateur clique ensuite sur le lien html vers index.html, et depuis index.html clique sur le lien retour à start.html, ou simplement clique en arrière. C'est-à-dire, comment puis-je effacer l'interception de l'utilisateur a quitté la page de démarrage, et effacer le drapeau d'erreur afin que je sache la deuxième fois que je n'ai pas besoin d'afficher l'erreur. Est-ce possible sans entrer dans les entrailles de la gestion du cycle de vie JSF? Non.

Remarque Les 3 pages indiquées est une schématisation grossière de mon webapp, en réalité, il y a plusieurs pages d'un utilisateur peut accéder à partir start.html, donc je ne veux pas avoir une solution où je dois suivre la page à laquelle quelqu'un arrive pour effacer les drapeaux pour commencer.

Répondre

1

Vous semblez transférer des données dans un bean de session. Rendre le haricot qui détient la demande de données de portée demande portée et ordonne au navigateur de not cache les pages dynamiques afin qu'il soit obligé de re-demander la page à partir du serveur web au lieu de son historique. Cela dit, je préfère utiliser une combinaison de FacesContext#addMessage() et <h:messages/> pour afficher les erreurs. Vous pouvez utiliser un clientId de null pour désigner un message global. Ils sont à leur tour déjà basés sur la requête, de sorte que vous n'avez pas besoin de vous tracasser avec un flag pour afficher/masquer une erreur.

E.g.

public void submit() { 
    FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Error!")); 
} 

avec

<h:messages globalOnly="true" /> 
+0

Merci - Vous avez raison au sujet de la demande/séance scope cause. En tout cas, je vais pour l'idée . – Kevin

+0

De rien. – BalusC

Questions connexes