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