JSF, ciclo de vida, Postback

2 respostas
J

Olá a todos, estou tendo problema com ciclo de vida do JSF 1.2 e confesso que ainda nao consegui entende-lo.

Bom, tenho um controle com os métodos, beforeCreate, create, beforeUpdate e update.
Tem uma JSP de consulta que tem a lista que nada mais é do que um SELECT * da entidade.
Nesta JSP de consulta tem o botao cadastrar e alterar.
Quando usuário clica no cadastrar ou salvar, o sistema estava executando o get que preenche a lista e depois renderizava o form de Cadastro/Atualizacao.
Resolvi isto criando o método isPostBack.
Porém quando o usuário cadastrar ou alterar algum registro da lista quero que na volta para JSP de consulta , a lista seja renderizada. Como forço o PostBack ?

Segue código:

Managed.java

public class Managed {

	public static final String CONSULTAR_STATE = "consultar";
	public static final String INCLUIR_STATE = "incluir";
	public static final String EDITAR_STATE = "editar";

	public String currentState = CONSULTAR_STATE;

	String mensagem;
	FacesContext fc = null;
	UIParameter param;

	public Managed() {
		this.mensagem = new String();
	}

	public Managed(String s) {
		this.mensagem = new String();
	}

	public boolean isConsultarState() {
		String state = this.getCurrentState();
		return (state == null || CONSULTAR_STATE.equals(state));
	}

	public boolean isIncluirState() {
		return INCLUIR_STATE.equals(this.getCurrentState());
	}

	public boolean isEditarState() {
		return EDITAR_STATE.equals(this.getCurrentState());
	}
	
	public boolean isPostback() {
		
		this.fc = FacesContext.getCurrentInstance();
		return this.fc != null
				&& this.fc.getExternalContext().getRequestParameterMap()
						.containsKey(ResponseStateManager.VIEW_STATE_PARAM);
	}
	

	// get´s and set´s

}

Classe VeiculoManaged.java

public class VeiculoManaged extends Managed implements Serializable, IManaged {

	private static final long serialVersionUID = -2737621680826043586L;

	// lista usada na consulta(rich:dataTable) em veiculo.jsp
	private List<VeiculoLicenciamento> veiculoLicenciamentos;

        .. demais atributos

	public void beforeCreate() {
		setCurrentState(INCLUIR_STATE);
		this.limpar();
	}

	@Override
	public void create() {
          ... regra ...
        }

        public void beforeUpdate(ActionEvent event) {
		
		setCurrentState(EDITAR_STATE);
                ... regra ...
        }

       	@Override
	public void update() {
             ... regra ...
        }

	// método que preenche a lista
         public List<VeiculoLicenciamento> getVeiculoLicenciamentos() {

		if (!isPostback()) {
			this.veiculoLicenciamentos.clear();
			if (this.filtroEmpresaSelecionada != null) {
				if (this.filtroEmpresaSelecionada.length() > 0) {
					Integer filtro = new Integer(this.filtroEmpresaSelecionada);
					try {
						this.veiculoLicenciamentos = this.vlfr.getEJB()
								.findAllFilter(filtro);
					} catch (Exception e) {
						e.printStackTrace();
					}
				} else
					listaTodosRegistros();
			} else
				listaTodosRegistros();
		}
		return veiculoLicenciamentos;
	}

Tem alguma forma de quando eu cadastrar/alterar o sistema refazer a getVeiculoLicenciamentos() mesmo com o isPostBack ?

grato
Júnior Carvalho

2 Respostas

Z

Olá Amigo,

Pelo que entendi vc quer [ Porém quando o usuário cadastrar ou alterar algum registro da lista quero que na volta para JSP de consulta , a lista seja renderizada. Como forço o PostBack ? ]

No final do seu método de cadastrar ou alterar, vc chama novamente o método para consultar a lista, ai vai resolver esse problema.

O ciclo de vida do jsf 1.2 tem a seguinte estrutura [ Monta arvore de componentes -> Conversão dos valores da arvore de componentes-> Validação dos valores da arvore de componentes -> seta as propriedades set do seu manager bean -> executa o método do manager bean -> atualiza a view, no caso o xhtml ]

Espero ter ajudado.
Abraços

J

Obrigado pela resposta,

Chamando o método novamente não funciona, uma vez que dentro do método tem o if(!isPostBak).

Criado 22 de março de 2011
Ultima resposta 23 de mar. de 2011
Respostas 2
Participantes 2