Galera to com o seguinte problema.
Eu Tenho dois selectonemenu
um com lista de estados
e outro com a lista de cidades do estado selecionado o problema ocorre da seguinte maneira.
eu seleciono o estado ele popula as cidades, mas quando eu submeto o formulario, o jsf carrega a minha lista de cidades novamente,
sendo que ao carrgar a lista de cidades, o bean que é responsavel por isso perde o estado, como se um novo objeto estivesse sendo criado.
o código abaixo.
estadoBean
[code]package br.com.compracoletiva.beans;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Service;
import org.springframework.web.context.WebApplicationContext;
import br.com.compracoletiva.dao.EstadoDao;
import br.com.compracoletiva.entity.Estado;
import br.com.compracoletiva.util.GenericBean;
@Service
@Scope(WebApplicationContext.SCOPE_REQUEST)
public class EstadoBean extends GenericBean {
@Autowired
private EstadoDao estadoDao;
private List<Estado> estados;
public List<Estado> getEstados() {
if(estados == null || estados.size() == 0)
estados = estadoDao.findAll();
return estados;
}
public void setEstados(List<Estado> estados) {
this.estados = estados;
}
}
[/code]
cidadeBean
[code]package br.com.compracoletiva.beans;
import java.util.ArrayList;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Service;
import org.springframework.web.context.WebApplicationContext;
import br.com.compracoletiva.dao.CidadeDao;
import br.com.compracoletiva.entity.Cidade;
import br.com.compracoletiva.entity.Estado;
import br.com.compracoletiva.util.GenericBean;
@Service
@Scope(WebApplicationContext.SCOPE_REQUEST)
public class CidadeBean extends GenericBean {
@Autowired
private CidadeDao cidadeDao;
private List<Cidade> cidades = new ArrayList<Cidade>();
private long estado;
public List<Cidade> getCidades() {
return cidades;
}
public void loadCidadesByEstado() {
if (estado != 0L) {
cidades = cidadeDao.findAllByEstado(new Estado(estado));
} else
cidades = new ArrayList<Cidade>();
}
public void setCidades(List<Cidade> cidades) {
this.cidades = cidades;
}
public long getEstado() {
return estado;
}
public void setEstado(long estado) {
this.estado = estado;
}
}
[/code]
administradorBean
[code]package br.com.compracoletiva.beans;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Service;
import org.springframework.web.context.WebApplicationContext;
import br.com.compracoletiva.business.AdministradorService;
import br.com.compracoletiva.entity.Administrador;
import br.com.compracoletiva.entity.Login;
import br.com.compracoletiva.util.GenericBean;
@Service
@Scope(WebApplicationContext.SCOPE_REQUEST)
public class AdministradorBean extends GenericBean {
@Autowired
private AdministradorService administradorService;
private Administrador administrador = new Administrador();
private Login login = new Login();
public void salvar() {
administrador.setLogin(login);
if (administradorService.save(administrador)) {
addInfoMessage("administrador.action.save");
} else {
addErrorMessage("administrador.action.save.error");
}
novo();
}
public void novo() {
administrador = new Administrador();
login = new Login();
}
public void excluir() {
if (administradorService.delete(administrador)) {
addInfoMessage("administrador.action.delete");
} else {
addErrorMessage("administrador.action.delete.error");
}
}
public List<Administrador> getAdministradores() {
return administradorService.getAdministradores();
}
public Administrador getAdministrador() {
return administrador;
}
public void setAdministrador(Administrador administrador) {
this.administrador = administrador;
}
public Login getLogin() {
return login;
}
public void setLogin(Login login) {
this.login = login;
}
}
[/code]
administradores.xhtml
[code]
<ui:composition xmlns=“http://www.w3.org/1999/xhtml”
xmlns:h=“http://java.sun.com/jsf/html”
xmlns:f=“http://java.sun.com/jsf/core”
xmlns:ui=“http://java.sun.com/jsf/facelets”
xmlns:p=“http://primefaces.prime.com.tr/ui”
template="/template/layoutManager.xhtml">
<ui:define name="title">
<h:outputText value="#{messages['administrador.title.label']}" />
</ui:define>
<ui:define name="body">
<p:messages id="messages" showDetail="true" />
<h:form id="formManagerAdministrador">
<h:inputHidden
value="#{administradorBean.administrador.idAdministrador}" />
<p:panel header="#{messages['administrador.panelManter.label']}">
<h:panelGrid columns="4">
<h:outputLabel value="#{messages['administrador.nome.label']}" />
<p:inputText id="nome" size="40"
value="#{administradorBean.administrador.nome}"
label="#{messages['administrador.nome.label']}" required="true" />
<h:outputLabel for="email"
value="#{messages['administrador.email.label']}" />
<p:inputText id="email" size="40"
value="#{administradorBean.administrador.email}"
label="#{messages['administrador.email.label']}" required="true" />
<h:outputLabel for="login" value="#{messages['login.login.label']}" />
<p:inputText id="login" value="#{administradorBean.login.login}"
label="#{messages['login.login.label']}" required="true" />
<h:outputLabel for="senha" value="#{messages['login.senha.label']}" />
<p:password id="senha" value="#{administradorBean.login.senha}"
promptLabel="#{messages['org.primefaces.password.feedback.promptLabel']}"
weakLabel="#{messages['org.primefaces.password.feedback.weak']}"
goodLabel="#{messages['org.primefaces.password.feedback.good']}"
strongLabel="#{messages['org.primefaces.password.feedback.strong']}"
label="#{messages['login.senha.label']}" />
<h:outputLabel value="#{messages['estado.descricao.label']}" />
<h:selectOneMenu id="estado" required="true"
value="#{cidadeBean.estado}"
label="#{messages['estado.descricao.label']}">
<f:selectItem itemValue="0"
itemLabel="#{messages['estado.noneSelected.label']}" />
<f:selectItems value="#{estadoBean.estados}" var="estado"
itemLabel="#{estado.descricao}"
itemValue="#{estado.idEstado}" />
<p:ajax update="cidade, messages"
listener="#{cidadeBean.loadCidadesByEstado}" />
</h:selectOneMenu>
<h:outputLabel value="#{messages['cidade.descricao.label']}" />
<h:selectOneMenu id="cidade" required="false"
value="#{administradorBean.administrador.cidade}"
label="#{messages['cidade.descricao.label']}">
<f:selectItem itemValue="0"
itemLabel="#{messages['cidade.noneSelected.label']}" />
<f:selectItems value="#{cidadeBean.cidades}" var="cidade"
itemLabel="#{cidade.descricao}"
itemValue="#{cidade.idCidade}" />
<f:validator validatorId="cidadeValidator"/>
<f:converter converterId="cidadeConverter"/>
</h:selectOneMenu>
<p:commandButton value="#{messages['button.salvar']}"
actionListener="#{administradorBean.salvar}"
update="formManagerAdministrador, messages" />
<p:commandButton value="#{messages['button.cancelar']}"
actionListener="#{administradorBean.novo}"
immediate="true"
update="formManagerAdministrador, messages"
type="reset" />
</h:panelGrid>
</p:panel>
</h:form>
</ui:define>
</ui:composition>[/code]
alguém sabe porque isso acontece.