Pergunta

Eu li em docs JSF que ResponseStateManager tem um método isPostBack() . Como (e onde) eu posso ter uma instância de ResponseStateManager?

Foi útil?

Solução

Como saber se estou em uma nova postagem?

Depende da versão JSF.

No JSF 1.0 / 1.1, não há nenhuma ResponseStateManager#isPostback() método disponível. verifique se o parâmetro javax.faces.ViewState está presente no mapa pedido de parâmetros como disponível por ExternalContext#getRequestParameterMap() .

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

No JSF 1.2, de fato usar ResponseStateManager#isPostback() que por sua vez, na verdade, verifica a presença de parâmetro javax.faces.ViewState no mapa de solicitação de parâmetro.

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

No JSF 2.0, em vez disso use FacesContext#isPostback() , que debaixo das cobertas realmente delegados ResponseStateManager#isPostback().

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

Outras dicas

Na verdade, antes jsf1.2, IsPostback foi obtida através da requestScope da instância atual de FaceContext .

Desde JSF1.2, O ResponseStateManager (classe auxiliar para StateManager que conhece a tecnologia de renderização específico que está sendo usado para gerar a resposta, um singleton classe abstrata , vended pela RenderKit.)

Durante a vista fase do ciclo de vida de restauração, ViewHandler recupera o ResponseStateManager objeto a fim de testar se a solicitação é uma nova postagem ou um pedido inicial.

Se a solicitação é uma nova postagem, o método therestoreView de ViewHandler é chamado. Este método usa theResponseStateManager objeto para re-construir a árvore de componentes e restaurar o estado. Depois que a árvore é construída e estado é restaurado, instância theViewHandler não é necessário até que a fase de resposta tornar ocorre novamente.

Esse artigo mencionada acima ( Criação e Utilização de renderização um personalizado Kit ) ilustra como implementar / obter uma ResponseStateManager, através de um RenderKit (definido pelo manipulador de tag implementar a etiqueta que torna o componente).
Pode ser este é o suficiente para que você comece seu próprio ResponseStateManager no seu contexto?

Para JSF1.2

public static boolean isPostback(){
    FacesContext context = FacesContext.getCurrentInstance();
    return context != null && context.getExternalContext().getRequestParameterMap().containsKey(ResponseStateManager.VIEW_STATE_PARAM);
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top