Cómo guardar todos los mensajes de Faces a través de diferentes solicitudes
-
16-12-2019 - |
Pregunta
Me estaba preguntando implementar un tipo de pantalla de registro al usuario donde en todos los mensajes en la aplicación se muestran al usuario todo el tiempo.
Dado que utilizo JSF 1.2 y RF 3.3.3, quería saber si es posible guardar todos los mensajes, se agregarán por diferentes solicitudes y mostrarlos al usuario, para que el usuario conozca la historia de las acciones que ha hecho.También es útil para el equipo de apoyo para analizar la causa del problema y puede enviar los mensajes al desarrollador si necesita simular o depurar para proponer también.
También sé que los mensajes de Facesages se aclaran sobre diferentes solicitudes, así es donde se encuentra mi pregunta, para guardar mensajes sobre diferentes solicitudes :)
podría manejarse de diferentes maneras al guardarlos es una variable de sesión o así ... Apreciaría todas las respuestas posibles
Solución
Puede recopilar todos los mensajes durante la respuesta de renderización en un PhaseListener
.E.g.
public class MessagesListener implements PhaseListener {
@Override
public PhaseId getPhaseId() {
return PhaseId.RENDER_RESPONSE;
}
@Override
public void beforePhase(PhaseEvent event) {
FacesContext context = event.getFacesContext();
Iterator<String> clientIds = context.getClientIdsWithMessages();
while (clientIds.hasNext()) {
String clientId = clientIds.next();
Iterator<FacesMessage> messages = context.getMessages(clientId);
while (messages.hasNext()) {
FacesMessage message = messages.next();
save(clientId, message); // Do your job here.
}
}
}
@Override
public void afterPhase(PhaseEvent event) {
// NOOP.
}
}
Para ejecutarlo, regístrate de la siguiente manera en faces-config.xml
:
<lifecycle>
<phase-listener>com.example.MessagesListener</phase-listener>
</lifecycle>