Ok, avec toutes les réponses à this question Je ne suis toujours pas capable de gérer mon problème. J'ai la constellation suivante:Comment éviter qu'une méthode de demande de beans portée soit appelée plusieurs fois dans une application JSF?
Dans une webapp JSF (1.1), j'ai une demande haricot sciée bean
de la classe Bean
. Lorsque l'utilisateur clique rapidement sur un commandButton
plusieurs fois pour le rediriger vers la page insult.xhtml
, la méthode doSomethingThatTakesALittleLongerAndShouldOnlyBeDoneOnce
peut être invoquée plusieurs fois (sur Tomcat 6). Comment puis-je empêcher cela?
...
public Bean() {
HttpSession session = ((HttpSession) FacesContext.getCurrentInstance()
.getExternalContext().getSession(false));
if(session != null && session.getAttribute("done") != null) {
doSomethingThatTakesALittleLongerAndShouldOnlyBeDoneOnce();
session.setAttribute("done", "done");
}
}
public void doSomethingThatTakesALittleLongerAndShouldOnlyBeDoneOnce() {
this.bossInsult = generateBossInsult();
}
insult.xhtml:
<ui:composition xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core">
<html>
<body>
#{bean.bossInsult}
</body>
</html>
</ui:composition>
Cela fonctionnerait, malheureusement, la situation réelle est un peu différent de mon exemple. La redirection provient d'une page tierce qui est hors de mon contrôle. – ceggers