这就是我所拥有的
<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解决方案的原因,是避免,在用户点击提交按钮后,再点击刷新,导致同一消息将被发布两次。
答案 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);