JSF: странное поведение, когда ясно вводатекпкареа с ajax
-
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);