2012-02-05 20 views
11

Tengo un malentendido con el uso del alcance de flash en jsf 2. Quiero poner un objeto en el mapa de flash durante mi acción y mostrar este objeto en la página siguiente. Aquí es mi acción (llamar por h: commandLink):El objeto en el alcance de Flash no está disponible después de redirigir

public String showDetail(PersonneDTO personne) { 
    MessageFlashBean message = new MessageFlashBean(); 
    message.addMessage("test"); 
    FacesContext.getCurrentInstance().getExternalContext().getFlash() 
     .put("test", message); 
    return "showDetail"; 
} 

Es sólo una prueba, pero el objeto real que quiero usar es más compleja.

Aquí es la segunda página con el uso de flash:

<ui:fragment rendered="#{flash.test != null and flash.test.hasMessage()}" > 
    <ui:repeat var="message" value="#{flash.test.messages}"> 
     #{message} 
    </ui:repeat> 
</ui:fragment> 

Aquí es la navegación (y aquí es mi problema :)):

<navigation-rule> 
    <from-view-id>/index.xhtml</from-view-id> 
    <navigation-case> 
     <from-outcome>showDetail</from-outcome> 
     <to-view-id>/private/showDetail.xhtml</to-view-id> 
    </navigation-case> 
</navigation-rule> 

En este caso, las obras de alcance del flash bien y mi mensaje aparece.

Pero si agrego una redirección en la caja de navegación, mi objeto en el mapa flash ha desaparecido.

No entiendo por qué no puedo usar el redireccionamiento en la regla de navegación (creía que era el objetivo del alcance del flash).

Puede haber algún problema en mi código.

¿Alguien me puede ayudar?

Gracias

+0

Lo he probado en JSF 2.0.3.FCS, sobrevivió a una redirección. – Ravi

Respuesta

14

implementación del alcance del flash JSF2 had a lot of problems de La Mojarra. La mayoría de ellos se resolvió con cada nueva versión de Mojarra. Actualmente, con el último Mojarra version, el 2.1.6, hasta ahora solo sé que hay un problema abierto importante: no funcionará si redirige a una ruta base diferente. Vea también el último comentario (actualmente) en la discusión larga en issue 1751.

En este momento, usted tiene básicamente las siguientes opciones:

  1. olvide el uso de Flash cuando se necesita para redirigir a una ruta de base diferente. Use un parámetro de solicitud en su lugar o intente simular el alcance del flash con una cookie personalizada.

  2. Si es posible, reorganice la estructura de carpetas para no tener que redirigir a una ruta base diferente cuando necesite que el alcance del flash sobreviva.

  3. Pruebe MyFaces en lugar de Mojarra. Tal vez lo hace mejor con respecto al alcance del flash.


actualización: según issue 2136, el último problema abierto del alcance del flash no estar disponible después de una redirección en un camino diferente se resuelve en el breve próximas Mojarra 2.1.14. Por lo tanto, con esta versión, todos los problemas relacionados con el alcance de Flash descubiertos y abiertos hasta el momento deben ser resueltos y cerrados.

+0

Muchas gracias, uso Mojarra 2.1.6 y no había visto este error. Es exactamente mi caso. Trataré de volver a la versión 2.0.3 – Kiva

2

jsf 2.1 con netbeans tiene este problema con flash. usar /somepage?redirect-faces=true or /somedirectory/somepage?faces-redirect=true no funciona. tiene que ser somepage?redirect-faces=true.

probado mojarra 2.1.7, pero no tenía el problema anterior.

+2

. Creo que el IDE aquí no importa ... –

Cuestiones relacionadas