Question

J'ai lu dans les documents JSF que ResponseStateManager a un isPostBack () . Comment (et où) puis-je avoir une instance de ResponseStateManager ?

Était-ce utile?

La solution

  

Comment savoir si je suis dans une publication?

Dépend de la version de JSF.

Dans JSF 1.0 / 1.1, il n'y a pas de ResponseStateManager # isPostback () disponible. vérifie si le paramètre javax.faces.ViewState est présent dans la mappe de paramètres de requête telle que disponible par ExternalContext # getRequestParameterMap () .

public static boolean isPostback() {
    ExternalContext externalContext = FacesContext.getCurrentInstance().getExternalContext();
    return externalContext.getRequestParameterMap().contains("javax.faces.ViewState");
}

Dans JSF 1.2, utilisez effectivement ResponseStateManager # isPostback () qui vérifie à son tour la présence du paramètre javax.faces.ViewState dans la mappe de paramètres de requête.

public static boolean isPostback() {
    FacesContext context = FacesContext.getCurrentInstance();
    return context.getRenderKit().getResponseStateManager().isPostback(context);
}

Dans JSF 2.0, utilisez plutôt FacesContext # isPostback () , qui sous les couvertures délègue en fait des délégués à ResponseStateManager # isPostback () .

public static boolean isPostback() {
    return FacesContext.getCurrentInstance().isPostback();
}

Autres conseils

En effet, avant jsf1.2, isPostBack était obtenu via le requestScope de l'instance actuelle. de FaceContext .

Depuis JSF1.2, ResponseStateManager (classe d'assistance à StateManager qui connaît la technologie de rendu spécifique utilisée pour générer la réponse, une classe abstraite singleton , vendue par le RenderKit.)

  

Au cours de la phase d'affichage de restauration du cycle de vie, ViewHandler récupère le ResponseStateManager object afin de vérifier si la demande est une publication ou une demande initiale.

     

Si une demande est une publication, la méthode ViewStandView de ViewHandler est appelée. Cette méthode utilise l'objet ResponseStateManager pour reconstruire l'arborescence des composants et restaurer l'état. Une fois l’arborescence construite et l’état restauré, l’instance ViewHandler n’est plus nécessaire tant que la phase de réponse au rendu ne se reproduit.

Cet article mentionné ci-dessus ( Création et utilisation d'un kit de rendu personnalisé ) illustre comment implémenter / obtenir un ResponseStateManager, via un RenderKit (défini par le gestionnaire de balises implémentant la balise rendant le composant).
C’est peut-être suffisant pour obtenir votre propre ResponseStateManager dans votre contexte?

Pour JSF1.2

public static boolean isPostback(){
    FacesContext context = FacesContext.getCurrentInstance();
    return context != null && context.getExternalContext().getRequestParameterMap().containsKey(ResponseStateManager.VIEW_STATE_PARAM);
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top