2009-02-15 6 views
49

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.Obtener solicitud y parámetros de sesión y atributos de las páginas JSF

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

¿Qué hacer ahora?

Respuesta

81

Usted puede obtener un parámetro de la petición Identificación usando la expresión:

<h:outputText value="#{param['id']}" /> 
  • parámetro -Un inmutable Mapa de los parámetros de la petición de esta solicitud, introducido por nombre del parámetro. Solo se incluye el primer valor para cada nombre de parámetro.
  • sessionScope -A Mapa de la sesión de atributos para esta solicitud, introducido por nombre del atributo.

La sección 5.3.1.2 del JSF 1.0 specification define los objetos que deben resolverse mediante la resolución de la variable.

34

También puede usar un bean (se sugiere solicitar el alcance) y acceder directamente al contexto a través de FacesContext.

Usted puede obtener los objetos HTTPServletRequest y HttpServletResposne usando el siguiente código:.

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

La razón sugiero una petición en ámbito de frijol es que se puede utilizar éstos durante la inicialización (en el peor de los casos es el constructor más los marcos le dan algún lugar para hacer el código en el momento de inicialización del bean) y se realizarán a medida que ingrese su solicitud.

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

+7

+1, pero ¿quién en el mundo, creó una API tan ridícula para obtener un solo parámetro? –

3

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

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

29

También se puede usar

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

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

Sin embargo, si desea pasar los parámetros a los beans de respaldo, utilizando f:viewParam es probablemente lo que quiere. "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 parámetro id del parámetro GET al campo entryId del bean website? Vea http://java.dzone.com/articles/bookmarkability-jsf-2 para los detalles

11

Puede desea:..

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

Debido requestScope o sessionScope es un objeto de mapa

4

Suponiendo que usted lready puesto que el objeto como atributo en el mapa de sesión de la instancia actual de la FacesContext desde your-bean administrado, se puede obtener de la página JSF por:

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

Si el objeto tiene una propiedad, lo consigue por :

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

¿Cómo puedo poner objeto de sesión como un atributo en el mapa de sesión de la instancia actual de FacesContext desde mi frijol administrado ??? –

+0

http://stackoverflow.com/questions/4495404/how-do-i-get-and-set-an-object-in-session-scope-in-jsf – Omar

Cuestiones relacionadas