He leído en documentos JSF que ResponseStateManager
tiene un método isPostBack()
. ¿Cómo (y dónde) puedo tener una instancia de ResponseStateManager
?¿Cómo saber si estoy en una devolución de datos?
Respuesta
¿Cómo saber si estoy en una devolución de datos?
Depende de la versión JSF.
En JSF 1.0/1.1, no hay ningún método disponible ResponseStateManager#isPostback()
. compruebe si el parámetro javax.faces.ViewState
está presente en el mapa de parámetros de solicitud disponible en ExternalContext#getRequestParameterMap()
.
public static boolean isPostback() {
ExternalContext externalContext = FacesContext.getCurrentInstance().getExternalContext();
return externalContext.getRequestParameterMap().contains("javax.faces.ViewState");
}
En JSF 1.2, de hecho utilizar ResponseStateManager#isPostback()
que a su vez comprueba efectivamente la presencia de javax.faces.ViewState
parámetro en el mapa de parámetros.
public static boolean isPostback() {
FacesContext context = FacesContext.getCurrentInstance();
return context.getRenderKit().getResponseStateManager().isPostback(context);
}
En JSF 2.0, en lugar de utilizar FacesContext#isPostback()
, que bajo las sábanas en realidad delegados a ResponseStateManager#isPostback()
.
public static boolean isPostback() {
return FacesContext.getCurrentInstance().isPostback();
}
podemos verificar isPostback en la página jsf (no en código java)? –
La instancia actual de 'FacesContext' está disponible en el alcance de EL por' # {facesContext} ', por lo que debería hacer esto:' # {facesContext.postback} '. – BalusC
De hecho, antes de jsf1.2, isPostBack se obtuvo a través del requestScope of the current instance of FaceContext.
Desde JSF1.2, La ResponseStateManager (clase de ayuda a StateManager que conoce la tecnología de renderización específica que se utiliza para generar la respuesta, un singleton clase abstracta, expendido por el RenderKit.)
Durante el restaurar la fase de vista del ciclo de vida, ViewHandler retrieves the ResponseStateManager object para probar si la solicitud es una devolución de datos o una solicitud inicial.
Si una solicitud es una devolución de datos, se llama al método therestoreView de ViewHandler. Este método usa el objeto RespuestStateManager para volver a generar el árbol de componentes y restaurar el estado. Después de construir el árbol y restablecer el estado, la instancia de ViewHandler no es necesaria hasta que la fase de respuesta al renderizado vuelva a ocurrir.
Ese artículo mencionado más arriba (Creating and Using a Custom Render Kit) ilustra cómo implementar/obtener una ResponseStateManager, a través de un RenderKit (definido por el controlador de etiqueta implemente la etiqueta que hace que el componente).
¿Puede ser esto suficiente para obtener su propio ResponseStateManager en su contexto?
gracias por tu exhaustividad (te voté). Necesitaba una pista más práctica, ahí es donde puedo obtener una instancia de ResponseStateManager que está usando mi implementación: más tarde descubrí que simplemente puedo acceder a RenderKit desde FacesContext y usar getResponseStateManager() –
Para JSF1.2
public static boolean isPostback(){
FacesContext context = FacesContext.getCurrentInstance();
return context != null && context.getExternalContext().getRequestParameterMap().containsKey(ResponseStateManager.VIEW_STATE_PARAM);
}
- 1. ¿Cómo puedo saber si estoy en el depurador en Android?
- 2. ¿Cómo puedo saber si estoy antes de guardar desde una edición o una creación? CakePHP
- 3. ¿Cómo puedo saber si estoy huyendo de JRuby vs. Ruby?
- 4. Learning Git. Necesito saber si estoy en el camino correcto
- 5. ¿Cómo puedo saber si estoy en una pila de excepción de Delphi?
- 6. ¿Cómo puedo saber en qué subrutina estoy?
- 7. ¿Cómo puedo saber si estoy corriendo en una máquina virtual VMWARE (desde Linux)?
- 8. En Linux, ¿cómo puedo saber si estoy enlazando a una biblioteca estática o dinámica?
- 9. ¿Puede un sitio web saber si estoy ejecutando un UserScript?
- 10. ¿Cómo saber si una cadena es xml?
- 11. Servidor SQL: ¿Cómo saber si una base de datos es una base de datos del sistema?
- 12. ¿Cómo se puede saber si un método se está ejecutando en la devolución de datos de UpdatePanel?
- 13. cómo saber si XMLHttpRequest.send() funcionó
- 14. Devolución genérica sin saber tipo
- 15. Forzar una devolución de datos
- 16. ¿Cómo puedo determinar si una solicitud es el resultado de una devolución de datos?
- 17. ¿Cómo puedo saber si estoy en x64 o x86 usando .NET?
- 18. ¿Cómo puedo saber si una columna es auto_increment en mysql?
- 19. ¿Cómo saber si una consulta escalará bien?
- 20. ¿Cómo saber si una oración es una pregunta (interrogativa)?
- 21. Cómo saber si un objeto de una relación existe en la base de datos
- 22. Cómo podría saber si existe una tabla de base de datos en ScalaQuery
- 23. ¿Cómo puedo detectar si mi página es el resultado de una devolución de datos?
- 24. ¿Cómo saber si estoy conectado con éxito a mi número saliente en Android?
- 25. ¿Cómo saber qué shell de Unix estoy usando?
- 26. ¿Qué es una devolución de datos?
- 27. Cómo puedo saber en qué página estoy en una aplicación MVC de ASP.NET
- 28. ¿Cómo saber si hay una base de datos de git en progreso?
- 29. ¿Cómo puedo saber qué versión de Cassandra estoy ejecutando?
- 30. ¿Cómo saber si tengo una llamada en Android?
Veo en su comentario que ha encontrado una solución práctica, y eso es genial. Podrías publicarlo aquí como respuesta, y lo votaré;) – VonC