Получить запрос и параметры сеанса и атрибуты со страниц JSF
Я использую JSF с facelets, и мне нужно получить параметры запроса и сеанса на странице JSF. В JSP-страницах я получил этот параметр: "${requestScope.paramName}"
или "${sessionScope.paramName}"
. Но теперь, после использования JSF, существует только beans, и вы не можете получить какое-либо значение, кроме атрибутов bean.
ПРИМЕЧАНИЕ. Атрибуты сеанса, которые мне нужны, автоматически заполняются с использованием безопасности acegi, поэтому я не могу получить к ним доступ.
Так что теперь делать? Каждая помощь будет оценена.
Ответы
Ответ 1
Вы можете получить идентификатор параметра запроса, используя выражение:
<h:outputText value="#{param['id']}" />
- param - неизменяемая Карта параметров запроса для этого запроса с ключом
имя параметра. Включено только первое значение для каждого имени параметра.
- sessionScope-A Карта атрибутов сеанса для этого запроса, с ключом
имя атрибута.
Раздел 5.3.1.2 спецификации JSF 1.0 определяет объекты, которые должны быть разрешены преобразователем переменных.
Ответ 2
Вы также можете использовать bean (предлагается область охвата запроса) и напрямую обращаться к контексту посредством FacesContext.
Вы можете получить объекты HttpServletRequest и HttpServletResposne, используя следующий код:
HttpServletRequest req = (HttpServletRequest)FacesContext.getCurrentInstance().getExternalContext().getRequest();
HttpServletResponse res = (HttpServletResponse)FacesContext.getCurrentInstance().getExternalContext().getResponse();
Причина, по которой я предлагаю охват запроса bean, заключается в том, что вы можете использовать их во время инициализации (наихудший сценарий - это конструктор. Большинство фреймворков дают вам некоторое место для кода в bean времени инициализации), и они будут выполнены как ваш запрос приходит.
Это, однако, немного взлома.;) Вы можете посмотреть, есть ли модуль JSF Acegi, который позволит вам получить доступ к необходимым вам переменным.
Ответ 3
Вы можете использовать
<h:outputText value="#{param['id']}" />
или
<h:outputText value="#{request.getParameter('id')}" />
Однако, если вы хотите передать параметры вашей резервной копии beans, использование f:viewParam
, вероятно, того, что вы хотите. "Параметр вида - это сопоставление между параметром строки запроса и значением модели."
<f:viewParam name="id" value="#{blog.entryId}"/>
Это установит параметр id параметра GET в поле блога bean entryId
. Подробнее см. http://java.dzone.com/articles/bookmarkability-jsf-2.
Ответ 4
Вам может понравиться следующее:
#{requestScope["paramName"]} ,#{sessionScope["paramName"]}
Потому что requestScope
или sessionScope
является объектом Map.
Ответ 5
Вы также можете использовать инструмент, например OcpSoft PrettyFaces, чтобы вводить значения динамических параметров непосредственно в JSF Beans.
Ответ 6
Предполагая, что вы уже поместили свой объект в качестве атрибута на карту сеанса текущего экземпляра FacesContext
из вашего управляемого bean, вы можете получить его со страницы JSF:
<h:outputText value="#{sessionScope['yourObject'] }" />
Если у вашего объекта есть свойство, получите его:
<h:ouputText value="#{sessionScope['yourObject'].anyProperty }" />
Ответ 7
Вы уверены, что не можете получить доступ к переменным области запроса/сеанса со страницы JSF?
Это то, что я делаю на нашей странице входа, используя Spring Безопасность:
<h:outputText
rendered="#{param.loginFailed == 1 and SPRING_SECURITY_LAST_EXCEPTION != null}">
<span class="msg-error">#{SPRING_SECURITY_LAST_EXCEPTION.message}</span>
</h:outputText>