как отличить JSF-действие или прямую ссылку на URL-адрес страницы - PullRequest
0 голосов
/ 06 октября 2010

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

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

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

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

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

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

1 Ответ

1 голос
/ 06 октября 2010

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

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

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

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

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

...