2010-09-16 10 views
3

Voici ce que j'aiJSF: le comportement bizarre quand inputTextArea clair avec ajax

<h:inputTextarea id="comment" rows="3" cols="50" value="#{bean.comment}" /><br/> 
<p:commandButton value="Comment" actionListener="#{bean.postMessage}" update="comment"/> 

afin postMessage() conserver des données, puis définissez la valeur de commentaire à vide comme ce

comment.setComment(""); 

grand travail. Lorsque j'appuie sur le bouton, le message est affiché, le texte est effacé. Mais ce qui est étrange quand je clique sur rafraîchir, le message apparaît à l'intérieur de la inputTextArea (Il ne est pas publié, juste réapparaître dans la zone de texte). Y'a t'il un moyen d'arranger cela?
P/S: la raison pour laquelle je veux une solution ajax, est d'éviter, après que l'utilisateur clique sur le bouton soumettre, puis appuyez sur actualiser, entraîner le même message sera affiché deux fois.

Répondre

4

Ceci est spécifique au navigateur web. Entre autres, Firefox expose ce comportement. La page a été demandée depuis le cache du navigateur et toutes les données de formulaire proviennent du cache du navigateur ainsi que des données "entrées en dernier".

Pour résoudre ce "problème", vous souhaitez désactiver le cache du navigateur pour les requêtes JSF dynamiques. Le plus facile est de créer un Filter qui est annotées comme @WebFilter(servletNames={"facesServlet"}) (où facesServlet est le <servlet-name> du FacesServlet comme DÉFINIES dans web.xml) et contient essentiellement les éléments suivants dans doFilter() méthode:

HttpServletResponse hsr = (HttpServletResponse) response; 
hsr.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // HTTP 1.1. 
hsr.setHeader("Pragma", "no-cache"); // HTTP 1.0. 
hsr.setDateHeader("Expires", 0); // Proxies. 
chain.doFilter(request, response); 
+0

Vous avez raison, Chrome ne se comporte pas de cette façon . Est-ce que désactiver le cache réduit les performances? Je n'ai jamais utilisé de cache auparavant, mais j'entends toujours comment le cache peut augmenter les performances. –

+1

Le consensus général est que vous souhaitez désactiver la mise en cache pour le contenu * dynamic * (jsp, jsf, etc.) et activer la mise en cache pour le contenu * statique * (img, css, js, etc.). Plus d'astuces peuvent être trouvées dans [cet article] (http://balusc.blogspot.com/2009/09/webapplication-performance-tips-and.html). – BalusC

+0

ohhh ouais. Des trucs géniaux. Certainement le lire bientôt. Merci l'homme –