Bom dia
Sou iniciante em java e estou tentando fazer um combo aninhado de Estados e Cidades pesquisei no fórum e não encontrei algo que pudesse me ajudar, eu consegui popular o selectonmenu dos estados porém não estou conseguindo passar o estado selecionado para o método que seria responsável por retornar as cidades baseadas no estado selecionado (Está passando um valor nullo).
Segue abaixo trechos do meu código:
View
<!-- LISTAR ESTADOS -->
<p:outputLabel value="Estados" for="estados" />
<p:selectOneMenu id="estados" filter="true"
value="#{cidadesBean.estado}"
requiredMessage="Selecione um estado">
<f:selectItem noSelectionOption="true" itemValue="" itemLabel="-- Estados --" />
<f:selectItems value="#{cidadesBean.estados}" var="estado"
itemValue="#{estado}" itemLabel="#{estado.nome}"/>
<p:ajax event="change" process="@this" listener="#{cidadesBean.popular}" update="cidades" />
</p:selectOneMenu>
<!-- LISTAR CIDADES -->
<p:outputLabel for="cidades" value="Cidades" />
<p:selectOneMenu id="cidades" filter="true" required="true"
requiredMessage="Campo Obrigatório" value="#{cidadesBean.cidade}" >
<f:selectItem noSelectionOption="true" itemValue="" itemLabel="-- Cidades --" />
<f:selectItems value="#{cidadesBean.cidades}" var="cidades"
itemValue="#{cidades}" itemLabel="#{cidades.nome}" />
</p:selectOneMenu>
Bean
@ManagedBean
@Controller
@Scope("views")
public class CidadesBean implements Serializable {
private static final long serialVersionUID = 1L;
@Autowired
CadCidadesServiceImpl cadCidades;
@Autowired
CadEstadosService cadEstadosService;
private Cidades cidade;
private List<Cidades> cidades;
private List<Estados> estados;
private Estados estado;
@PostConstruct
public void ini() {
estados = cadEstadosService.getListaEstados();
cidades = new ArrayList<>();
}
public Estados getEstado() {
return estado;
}
public void setEstado(Estados estado) {
this.estado = estado;
}
public Cidades getCidade() {
return cidade;
}
public void setCidade(Cidades cidade) {
this.cidade = cidade;
}
public List<Cidades> getCidades() {
return cidades;
}
public void setCidades(List<Cidades> cidades) {
this.cidades = cidades;
}
public List<Estados> getEstados() {
return estados;
}
public void setEstados(List<Estados> estados) {
this.estados = estados;
}
public void popular() {
try {
if (estado != null) {
cidades = cadCidades.consultaCidades(estado);
} else {
cidades = new ArrayList<>();
}
} catch (RuntimeException erro) {
erro.printStackTrace();
}
}
}