JSF: странное поведение, когда ясно вводатекпкареа с ajax

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, чтобы избежать, после того, как пользователь нажимает кнопку «Отправить», затем нажмите Обновить, привести к Такое же сообщение будет опубликовано дважды.

Это было полезно?

Решение

Это специфично для WebBrowser. Среди прочего, Firefox подвергает этому поведению. Страница была запрошена из кэша браузера, и любая форма данных исходит из кеша браузера, а также «Последние введенные» данные.

Чтобы решить эту «проблему», вы хотите отключить кэш браузера для динамических запросов JSF. Проще всего создать 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