Domanda

Ho letto nei documenti JSF che ResponseStateManager ha un isPostBack () . Come (e dove) posso avere un'istanza di ResponseStateManager ?

È stato utile?

Soluzione

  

Come sapere se mi trovo in un postback?

Dipende dalla versione JSF.

In JSF 1.0 / 1.1, non esiste ResponseStateManager # isPostback () disponibile. controlla se il parametro javax.faces.ViewState è presente nella mappa dei parametri di richiesta come disponibile da ExternalContext # getRequestParameterMap () .

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

In JSF 1.2, utilizza infatti ResponseStateManager # isPostback () che a sua volta controlla effettivamente la presenza del parametro javax.faces.ViewState nella mappa dei parametri della richiesta.

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

In JSF 2.0, usa invece FacesContext # isPostback () , che sotto le copertine in realtà delega a ResponseStateManager # isPostback () .

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

Altri suggerimenti

In effetti, prima di jsf1.2, isPostBack è stato ottenuto attraverso la requestScope dell'istanza corrente di FaceContext .

Da JSF1.2, The ResponseStateManager (classe di supporto a StateManager che conosce la specifica tecnologia di rendering utilizzata per generare la risposta, una classe astratta singleton , venduta da RenderKit.)

  

Durante la fase di visualizzazione del ripristino del ciclo di vita, ViewHandler recupera ResponseStateManager oggetto per verificare se la richiesta è un postback o una richiesta iniziale.

     

Se una richiesta è un postback, viene chiamato il metodo therestoreView di ViewHandler. Questo metodo utilizza l'oggettoResponseStateManager per ricostruire l'albero dei componenti e ripristinare lo stato. Dopo la creazione dell'albero e il ripristino dello stato, l'istanza ViewHandler non è necessaria finché non si verifica nuovamente la fase di risposta del rendering.

Quell'articolo menzionato sopra ( Creazione e utilizzo di un kit di rendering personalizzato ) illustra come implementare / ottenere un ResponseStateManager, tramite un RenderKit (definito dal gestore tag che implementa il tag che esegue il rendering del componente).
Potrebbe essere sufficiente per ottenere il tuo ResponseStateManager nel tuo contesto?

Per JSF1.2

public static boolean isPostback(){
    FacesContext context = FacesContext.getCurrentInstance();
    return context != null && context.getExternalContext().getRequestParameterMap().containsKey(ResponseStateManager.VIEW_STATE_PARAM);
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top