JSF: странное поведение при очистке inputTextArea с помощью ajax - PullRequest
3 голосов
/ 16 сентября 2010

Вот что у меня есть

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

1 Ответ

4 голосов
/ 16 сентября 2010

Это специфично для веб-браузера.Среди прочего, 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...