Frage

Ich habe in JSF docs lesen, dass ResponseStateManager hat eine isPostBack() Methode. Wie (und wo) kann ich eine Instanz von ResponseStateManager?

War es hilfreich?

Lösung

  

Wie kann man wissen, ob ich in einem Postback bin?

Abhängig von JSF-Version.

In JSF 1.0 / 1.1, gibt es kein ResponseStateManager#isPostback() Methode zur Verfügung. überprüfen, ob javax.faces.ViewState Parameter im Anforderungsparameterkarte vorhanden ist, wie erhältlich von ExternalContext#getRequestParameterMap() .

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

In JSF 1.2, in der Tat ResponseStateManager#isPostback() verwenden, die eigentlich wiederum das Vorhandensein von javax.faces.ViewState Parametern im Anforderungsparameterkarte überprüft.

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

In JSF 2.0, verwenden Sie stattdessen

Andere Tipps

Tatsächlich bevor jsf1.2 wurde IsPostBack durch die request der aktuellen Instanz von FaceContext .

Da JSF1.2, Der ResponseStateManager (Helfer-Klasse State, die die spezifische Rendering-Technologie kennt genutzt, um die Antwort zu erzeugen, eine Singleton abstrakte Klasse , durch die RenderKit vended.)

  

Während der Ansicht Phase des Lebenszyklus wiederherzustellen, Viewhandler ruft die ResponseStateManager Objekt , um zu testen, ob die Anforderung eine Postbacks oder eine erste Anforderung ist.

     

Wenn eine Anfrage ein Postbacks ist, wird therestoreView Methode von Viewhandler aufgerufen. Diese Methode verwendet theResponseStateManager Objekt den Komponentenbaum wieder aufzubauen und Zustand wiederherzustellen. Nachdem der Baum gebaut und Zustand wiederhergestellt wird, wird theViewHandler Instanz nicht, bis die Render benötigt Antwortphase erneut auftritt.

In diesem Artikel erwähnt oben ( Erstellen und einer benutzerdefinierten Render Kit mit ) zeigt, wie zu implementieren / eine ResponseStateManager erhalten, durch eine RenderKit (von der Tag-Handler definiert den Tag-Implementierung, die die Komponente macht).
Kann dies genug ist, damit Sie Ihre eigenen ResponseStateManager in Ihrem Kontext bekommen?

Für JSF1.2

public static boolean isPostback(){
    FacesContext context = FacesContext.getCurrentInstance();
    return context != null && context.getExternalContext().getRequestParameterMap().containsKey(ResponseStateManager.VIEW_STATE_PARAM);
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top