viewparam passing parameter pages example bean backing session jsf request facelets

session - passing - jsf viewparam example



Obtenga solicitud y parámetros de sesión y atributos de páginas JSF (7)

Estoy usando JSF con facelets y necesito obtener los parámetros de solicitud y sesión dentro de la página JSF. En las páginas JSP obtuve este parámetro así: "${requestScope.paramName}" o "${sessionScope.paramName}" . Pero ahora, después de usar JSF, solo hay beans y no se puede obtener ningún valor excepto los atributos de bean.

NOTA: La sesión atribuye lo que necesito se rellena automáticamente usando seguridad de acegi, así que no puedo tener acceso a ellos.

Entonces, ¿qué hacer ahora?


¿Está seguro de que no puede obtener acceso a las variables de solicitud / ámbito de sesión desde una página JSF?

Esto es lo que estoy haciendo en nuestra página de inicio de sesión, usando 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>


Puede obtener un ID de parámetro de solicitud usando la expresión:

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

  • param: un mapa inmutable de los parámetros de solicitud para esta solicitud, con la clave del nombre del parámetro. Solo se incluye el primer valor para cada nombre de parámetro.
  • sessionScope- Un mapa de los atributos de la sesión para esta solicitud, tecleados por el nombre del atributo.

La sección 5.3.1.2 de la especificación JSF 1.0 define los objetos que debe resolver el resolvedor de variables.


Puedes usar

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

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

Sin embargo, si desea pasar los parámetros a sus beans de respaldo, usar f:viewParam es probablemente lo que desea. "Un parámetro de vista es una asignación entre un parámetro de cadena de consulta y un valor de modelo".

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

Esto establecerá el param id del parámetro GET en el campo entryId del bean del entryId . Consulte http://java.dzone.com/articles/bookmarkability-jsf-2 para obtener más detalles.


Suponiendo que ya coloque su objeto como atributo en el mapa de sesión de la instancia actual de FacesContext desde su frijol administrado, puede obtenerlo de la página JSF de la siguiente manera:

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

Si su objeto tiene una propiedad, obténgalo:

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


También puede usar un bean (se sugiere un ámbito de solicitud) y acceder directamente al contexto a través de FacesContext.

Puede obtener los objetos HttpServletRequest y HttpServletResposne utilizando el siguiente código:

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

Después de esto, puede acceder a los parámetros individuales a través de getParameter(paramName) o acceder al mapa completo a través del objeto getParameterMap()

La razón por la que sugiero un bean con ámbito de solicitud es que puede usarlos durante la inicialización (el peor escenario es el constructor. La mayoría de los marcos le dan un lugar para hacer código en el momento de inicialización del bean) y se realizarán a medida que ingrese su solicitud.

Sin embargo, es un poco pirata. ;) Es posible que desee ver si hay un módulo JSF Acegi que le permita acceder a las variables que necesita.


También puede usar una herramienta como PrettyFaces de PrettyFaces para inyectar valores de parámetros dinámicos directamente en beans JSF.


Te puede gustar esto:

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

Porque requestScope o sessionScope es un objeto Map.