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

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?

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

  
  • 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.

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.

Puedes usar

o

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”.

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.

Te puede gustar esto:

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

Porque requestScope o sessionScope es un objeto Map.

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

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:

  

Si su objeto tiene una propiedad, obténgalo:

  

¿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:

  #{SPRING_SECURITY_LAST_EXCEPTION.message}