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

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

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

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

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

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

Заранее спасибо. Ну платформа JSF 1.1 в веблогическом портале 10,3 .....

1 ответ

Решение

Действия 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.

Другие вопросы по тегам