как отличить действие jsf от прямой URL-ссылки, вызывающей страницу

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

  •  28-09-2019
  •  | 
  •  

Вопрос

У меня есть ситуация: у меня есть сеансовый компонент со списком, этот список я показываю в таблице данных html.Когда пользователь переходит по URL-адресу из браузера или обычной ссылки, мне приходится показывать все записи.Также есть возможность поиска данных, где мне нужно показать отфильтрованный список.Теперь после того, как пользователь выполнил поиск, список содержит отфильтрованные записи, и после этого он оставляет страницу какой-то другой, и теперь, если пользователь нажимает на URL-адрес или использует меню, чтобы вернуться на эту страницу, так как у меня есть этот список в сеансовом компоненте у меня все еще есть отфильтрованный список.

Поскольку в концепции JSF 1.1 или 2.0 preRenderView нет действия по умолчанию, трудно очистить список и снова получить нефильтрованные данные (все результаты).Даже трюки в методе getList() не позволяют выполнить задачу.

Я планировал использовать прослушиватель фазы, так как когда пользователь попадает на страницу через href или URL-адрес в браузере, фаза вызова приложения не происходит.Я могу переключить логическую переменную в своем сеансовом компоненте, а в getList() я могу выполнить некоторый трюк, чтобы проверить, что это был URL-адрес, нажатие href или командная кнопка.

Надеюсь, я ясно выразился.Короче говоря, мне нужно определить в своем компоненте, поступил ли запрос непосредственно из href, браузера или действия.Если действие поиска фильтрует записи для таблицы данных, если нет, сохраните кеш списка и продолжайте показывать его до тех пор, пока не будет выполнен поиск.

Просто подскажи мне, правильно ли я что-то делаю или слишком много думаю, или можно ли это сделать гораздо более эффективным способом.

Заранее спасибо.Ну, платформа - jsf 1.1 на портале weblogic 10.3.....

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

Решение

Действия JSF 1.x используются по умолчанию POST метод.Прямые ссылки/закладки/и т. д. по своей природе GET метод.Поскольку нет ResponseStateManager#isPostback() или FacesContext#isPostback() в JSF 1.1 вам придется самостоятельно определить метод запроса:

HttpServletRequest request = (HttpServletRequest) facesContext.getExternalContext().getRequest();
boolean postback = "POST".equalsIgnoreCase(request.getMethod());

Или проверьте определенный параметр в карте параметров запроса, но я не могу сразу сказать, какой из них вы хотите проверить.Вы должны определить это сами.

boolean postback = facesContext.getExternalContext().getRequestParameterMap().containsKey(SOME_KEY);

Если postback является true, затем вызывается действие JSF.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top