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

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

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

Так что же теперь делать?


person Community    schedule 15.02.2009    source источник


Ответы (8)


Вы можете получить параметр запроса id, используя выражение:

<h:outputText value="#{param['id']}" />
  • param - неизменяемая карта параметров запроса для этого запроса, привязанная к имени параметра. Включено только первое значение для каждого имени параметра.
  • sessionScope - карта атрибутов сеанса для этого запроса с ключом по имени атрибута.

В разделе 5.3.1.2 спецификации JSF 1.0 определены объекты, которые необходимо разрешить. преобразователем переменных.

person McDowell    schedule 15.02.2009

Вы также можете использовать bean-компонент (предлагается область действия запроса) и напрямую обращаться к контексту через FacesContext.

Вы можете получить объекты HttpServletRequest и HttpServletResposne, используя следующий код:

HttpServletRequest req = (HttpServletRequest)FacesContext.getCurrentInstance().getExternalContext().getRequest();
HttpServletResponse res = (HttpServletResponse)FacesContext.getCurrentInstance().getExternalContext().getResponse();

После этого вы можете получить доступ к отдельным параметрам через getParameter(paramName) или к полной карте через объект getParameterMap() req

Причина, по которой я предлагаю bean-компонент с ограниченным объемом запроса, заключается в том, что вы можете использовать его во время инициализации (в худшем случае - конструктор. Большинство фреймворков дают вам место для выполнения кода во время инициализации bean-компонента), и они будут выполнены по мере поступления вашего запроса.

Однако это своего рода взлом. ;) Вы можете посмотреть, существует ли модуль JSF Acegi, который позволит вам получить доступ к нужным вам переменным.

person Drew    schedule 17.02.2009
comment
+1, а кто вообще придумал такой нелепый API для получения единственного параметра? - person G. Demecki; 30.01.2014
comment
@GDemecki: Никто ... может, люди, занимающиеся php, переходят на JSF. stackoverflow.com/questions/28780051/ - person Kukeltje; 04.06.2018

Вы можете использовать

<h:outputText value="#{param['id']}" /> or

<h:outputText value="#{request.getParameter('id')}" />

Однако, если вы хотите передать параметры вашим поддерживающим bean-компонентам, вероятно, вам нужно использовать f:viewParam. «Параметр представления - это отображение между параметром строки запроса и значением модели».

<f:viewParam name="id" value="#{blog.entryId}"/>

Это установит параметр id параметра GET в поле entryId блога. Подробнее см. http://java.dzone.com/articles/bookmarkability-jsf-2.

person ustun    schedule 15.11.2011

Вам может понравиться это:

#{requestScope["paramName"]} ,#{sessionScope["paramName"]}

Потому что requestScope или sessionScope - это объект Map.

person Ming    schedule 12.11.2012

Вы также можете использовать такой инструмент, как PrettyFaces от OcpSoft, чтобы вводить значения динамических параметров непосредственно в JSF Beans.

person Lincoln    schedule 08.02.2010

Предполагая, что вы уже поместили свой объект в качестве атрибута на карту сеанса текущего экземпляра FacesContext из вашего управляемого bean-компонента, вы можете получить его со страницы JSF следующим образом:

<h:outputText value="#{sessionScope['yourObject'] }" />

Если у вашего объекта есть свойство, получите его:

<h:ouputText value="#{sessionScope['yourObject'].anyProperty }" />
person Omar    schedule 17.07.2013
comment
Как я могу поместить объект сеанса в качестве атрибута на карту сеанса текущего экземпляра FacesContext из моего управляемого bean-компонента ??? - person Usman Riaz; 10.09.2014
comment
stackoverflow.com/questions/4495404/ - person Omar; 10.09.2014

Вы уверены, что не можете получить доступ к переменным области запроса / сеанса со страницы JSF?

Вот что я делаю на нашей странице входа, используя Spring Security:

<h:outputText
    rendered="#{param.loginFailed == 1 and SPRING_SECURITY_LAST_EXCEPTION != null}">
    <span class="msg-error">#{SPRING_SECURITY_LAST_EXCEPTION.message}</span>
</h:outputText>
person Community    schedule 18.02.2009

В bean-компоненте вы можете использовать session.getAttribute ("attributeName");

person Wandile Nxumalo    schedule 19.03.2019