Подтвердить что ты не робот

Получить запрос и параметры сеанса и атрибуты со страниц JSF

Я использую JSF с facelets, и мне нужно получить параметры запроса и сеанса на странице JSF. В JSP-страницах я получил этот параметр: "${requestScope.paramName}" или "${sessionScope.paramName}". Но теперь, после использования JSF, существует только beans, и вы не можете получить какое-либо значение, кроме атрибутов bean.

ПРИМЕЧАНИЕ. Атрибуты сеанса, которые мне нужны, автоматически заполняются с использованием безопасности acegi, поэтому я не могу получить к ним доступ.

Так что теперь делать? Каждая помощь будет оценена.

4b9b3361

Ответ 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>