Как отличить 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.