Pregunta

He leído en documentos JSF que ResponseStateManager tiene un isPostBack () método. ¿Cómo (y dónde) puedo tener una instancia de ResponseStateManager ?

¿Fue útil?

Solución

  

¿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 ResponseStateManager # isPostback () método 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, de hecho use ResponseStateManager # isPostback () que a su vez verifica 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();
}

Otros consejos

De hecho, antes de jsf1.2, isPostBack se obtuvo a través de requestScope de la instancia actual de FaceContext .

Desde JSF1.2, The ResponseStateManager (clase auxiliar de StateManager que conoce la tecnología de representación específica que se utiliza para generar la respuesta, una clase abstracta singleton , que vende RenderKit).

  

Durante la fase de vista de restauración del ciclo de vida, ViewHandler recupera el ResponseStateManager objeto 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étodorestoreView de ViewHandler. Este método utiliza el objeto ResponseStateManager para reconstruir el árbol de componentes y restaurar el estado. Una vez que se haya creado el árbol y se haya restaurado el estado, la instancia de ViewHandler no es necesaria hasta que la fase de respuesta de representación vuelva a ocurrir.

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 representa el componente).
¿Puede ser suficiente para obtener su propio ResponseStateManager en su contexto?

Para JSF1.2

public static boolean isPostback(){
    FacesContext context = FacesContext.getCurrentInstance();
    return context != null && context.getExternalContext().getRequestParameterMap().containsKey(ResponseStateManager.VIEW_STATE_PARAM);
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top