JSF:Ajaxを使用した透明な入力Textareaのときの奇妙な動作
-
03-10-2019 - |
質問
これが私が持っているものです
<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ソリューションが必要な理由は、ユーザーが[送信]ボタンをクリックした後、リフレッシュを押して、結果として避けることです。 同じメッセージが2回投稿されます.
解決
これは、ウェブブラウザーに固有です。とりわけ、Firefoxはこの動作を暴露しています。このページはブラウザキャッシュから要求され、任意のフォームデータはブラウザキャッシュから「最後に入力された」データから送信されます。
この「問題」を解決するには、動的なJSFリクエストのブラウザキャッシュを無効にします。最も簡単なのは、aを作成することです Filter
これは注釈が付けられています @WebFilter(servletNames={"facesServlet"})
(どこ facesServlet
それは <servlet-name>
の 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);
所属していません StackOverflow