JSF:Ajaxを使用した透明な入力Textareaのときの奇妙な動作

StackOverflow https://stackoverflow.com/questions/3728875

  •  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);
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top