jsf-2 - elementos - jsf tutorial español
Pasar un FacesMessage a la página siguiente (2)
Esta pregunta ya tiene una respuesta aquí:
Estoy buscando una manera elegante de JSF para hacer esto y me preguntaba si había alguna práctica comúnmente aceptada para hacer esto.
Cuando navego de una página a otra, quiero que la nueva página muestre un FacesMessage en un componente h: message (en realidad p: message pero debería ser lo mismo) que se transmitió desde la última página.
Por ejemplo, si un usuario hace clic en el botón "Crear documento", navega a una página nueva cuando tiene éxito y muestra el mensaje de éxito en la página nueva. Quiero que todas mis operaciones de cambio de base de datos se comporten de esa manera.
Parece que FacesContext borra todos los mensajes en la navegación, por lo que mi solución más cercana se ve así:
- Almacene el objeto FacesMessage en el bean de sesión.
- Cree un método checkMessage en el bean de mensaje que llame a FacesContext.getCurrentInstance (). AddMessage (..) y elimine el mensaje del bean de mensaje.
- Ponga una referencia EL para checkMessage en la página de destino.
- Ponga un mensaje p: en la página de destino.
Esto parece un poco forzado, ¿hay una mejor manera de hacerlo?
Los mensajes de las caras son, de hecho, de ámbito de solicitud.
Solo haga uso del nuevo alcance Flash de JSF 2.0: Flash#setKeepMessages()
:
context.addMessage(clientId, message);
context.getExternalContext().getFlash().setKeepMessages(true);
// ...
Esto tiene solo una advertencia en la versión actual de Mojarra 2.1.13: la redirección debe tener lugar en la misma "carpeta" en la URL. Esto se soluciona en la próxima 2.1.14. Ver también el número 2136 .