Как обновить представление JSF (Richfaces)

#jsf

#jsf

Вопрос:

У меня есть две страницы JSF, index.xhtml [индекс] и main.xhtml [главная]. В индексе у меня есть выпадающий список, и когда я выбираю и отправляю, приложение переходит к основному после взаимодействия с вспомогательным компонентом.

Проблема заключается в следующем (учитывая выпадающий список, заполненный ‘d1’, ‘d2’ и ‘d3’):

  • индекс: выберите ‘d1’
  • главная: показывает страницу с данными d1. нажмите выход. возвращает к индексу
  • индекс: обновлены основные элементы данных компонента. выберите ‘d2’
  • главная: из-за ошибки в вспомогательном компоненте отображается главная страница, но по-прежнему присутствуют данные d1

Я перепробовал несколько способов удалить содержимое представления, когда faces переходит обратно на страницу индекса приветствия, но это зависает на стороне клиента.

Какой наиболее эффективный способ очистить дерево / представление клиентских компонентов, чтобы, когда пользователь входит на главную страницу приложения и выходит из нее и выбирает новые данные, старые данные удаляются?

Приветствия

Ответ №1:

Поместите компонент в область запроса или представления (таким образом, не в область сеанса), чтобы JSF создавал новые компоненты при новых запросах и инструктировал веб-браузер не кэшировать страницу, чтобы он не отображал страницу повторно со старыми входными значениями из кэша.

Изменение области действия компонента — тривиальная задача. Отключение кэша браузера для запросов JSF может быть выполнено классом filter, который отображается на <servlet-name>facesServlet</servlet-name> и выполняет в 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);