JSF:使用ajax清除inputTextArea时的奇怪行为

时间:2010-09-16 16:51:35

标签: jsf primefaces

这就是我所拥有的

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

所以postMessage()保留数据,然后将注释的值设置为空,如此

comment.setComment("");

工作得很好。当我按下按钮时,会发布消息,文本被清除。但奇怪的是,当我点击刷新时,消息会显示在inputTextArea内(它没有发布,只是重新出现在文本框中)。有没有办法解决这个问题? P / S:我想要ajax解决方案的原因,是避免,在用户点击提交按钮后,再点击刷新,导致同一消息将被发布两次

1 个答案:

答案 0 :(得分:4)

这是特定于webbrowser的。其中,Firefox暴露了这种行为。该页面是从浏览器缓存中请求的,任何表单数据都来自浏览器缓存以及“最后输入”数据。

要解决此“问题”,您需要为动态JSF请求禁用浏览器缓存。最简单的方法是创建Filter,其注释为@WebFilter(servletNames={"facesServlet"})(其中facesServlet<servlet-name>的{​​{1}},FacesServlet中定义的web.xml和在doFilter()方法中基本上包含以下内容:

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);