showcase - templates jsf primefaces
¿Cómo saber si estoy en una devolución de datos? (3)
De hecho, antes de jsf1.2, isPostBack se obtuvo a través del requestScope de la instancia actual de FaceContext .
Desde JSF1.2, The ResponseStateManager (clase de ayuda a StateManager que conoce la tecnología de representación específica que se utiliza para generar la respuesta, una clase abstracta de singleton , cedida por RenderKit).
Durante la fase de restauración de la vista del ciclo de vida, ViewHandler recupera el objeto ResponseStateManager 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 que se construye el árbol y se restaura el estado, la instancia de ViewHandler no es necesaria hasta que la fase de respuesta de representación se repite.
Ese artículo mencionado anteriormente ( Creación y uso de un kit de renderizado personalizado ) ilustra cómo implementar / obtener un ResponseStateManager, a través de un RenderKit (definido por el controlador de etiquetas que implementa la etiqueta que procesa el componente).
¿Puede ser que esto es suficiente para que obtengas tu propio ResponseStateManager en tu contexto?
He leído en documentos JSF que ResponseStateManager
tiene un método isPostBack()
. ¿Cómo (y dónde) puedo tener una instancia de ResponseStateManager
?
Para JSF1.2
public static boolean isPostback(){
FacesContext context = FacesContext.getCurrentInstance();
return context != null && context.getExternalContext().getRequestParameterMap().containsKey(ResponseStateManager.VIEW_STATE_PARAM);
}
¿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 un método ResponseStateManager#isPostback()
disponible. compruebe si el parámetro javax.faces.ViewState
está presente en el mapa de parámetros de solicitud como está disponible en ExternalContext#getRequestParameterMap()
.
public static boolean isPostback() {
ExternalContext externalContext = FacesContext.getCurrentInstance().getExternalContext();
return externalContext.getRequestParameterMap().contains("javax.faces.ViewState");
}
En JSF 1.2, use ResponseStateManager#isPostback()
que a su vez comprueba la presencia del parámetro javax.faces.ViewState
en el mapa de parámetros de solicitud.
public static boolean isPostback() {
FacesContext context = FacesContext.getCurrentInstance();
return context.getRenderKit().getResponseStateManager().isPostback(context);
}
En JSF 2.0, use FacesContext#isPostback()
, que en realidad se delega en ResponseStateManager#isPostback()
.
public static boolean isPostback() {
return FacesContext.getCurrentInstance().isPostback();
}