3

这是我所拥有的

<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 解决方案的原因是为了避免在用户单击提交按钮后,然后点击刷新,导致相同的消息会被发布两次

4

1 回答 1

4

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

为了解决这个“问题”,您希望为动态 JSF 请求禁用浏览器缓存。最简单的方法是创建一个Filter被注释为@WebFilter(servletNames={"facesServlet"})(在哪里定义的facesServlet<servlet-name>并且在方法中基本上包含以下内容:FacesServletweb.xmldoFilter()

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);
于 2010-09-16T17:54:45.717 回答