Pessoal, estou com uma dúvida chata. Tenho um formulário e um datatable que é atualizado após o submit. Nesse formulário tem um selectoneMenu que liga com outra tabela do banco. Ele está funcional, porém quando vou gravar, ele atualiza todos os campos automaticamente no datatable na mesma página, com exceção do campo que vem do SelectOneMenu. O último detalhe é que se eu fizer um F5 na tela, aparece o item gravado normalmente e no banco tbm está salvo do jeito certo. Meu problema é justamente ali naquele momento do Submit.
Código xhtml
<p:selectOneMenu value="#{carroBean.carro.marca.id}" id=“marca”>
<f:selectItem itemValue="" itemLabel=“Selecione a marca”/>
<f:selectItems value="#{carroBean.marcas}" var=“marca” itemValue="#{marca.id}"
itemLabel="#{marca.nome}">
</f:selectItems>
</p:selectOneMenu>
<p:commandButton value=“Salvar” action="#{carroBean.adicionar}" process="@form"
update="@form :frmCarros:tbCarros :msgGlobal" onclick=“PF(‘frmCarros’).clearFilters();”/>
Código da tabela ao fim:
<p:column headerText=“Marca” sortBy="#{carro.marca.nome}">
<p:outputLabel value="#{carro.marca.nome}"/>
</p:column>
</p:dataTable>
Código Bean
public void adicionar() {
try {
if(carro.getId() == 0) {
cdao.salvar(carro);
lista.add(carro);
cdao.listar(Carro.class);
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO,
“Carro “+carro.getModelo()+” cadastrado com sucesso!”,“Sucesso”));
}else {
cdao.editar(carro);
cdao.listar(Carro.class);
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO,
“Carro “+carro.getModelo()+” editado com sucesso!”,“Sucesso”));
}
} catch (Exception e) {
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR,
“Erro ao cadastrar ou alterar marca!”,“Erro!”));
e.printStackTrace();
System.out.println(e.getMessage());
}
carro = new Carro();
}
public List<Marca> getMarcas() {
MarcaDAO mdao = new MarcaDAO();
marcas = mdao.listar(Marca.class);
return marcas;
}
public void setMarcas(List<Marca> marcas) {
this.marcas = marcas;
}