p:selectOneMenu não recebe o valor após find

1 resposta
jsfprimefaces
Diego_Adriano

Galera, estou com o seguinte problema, tenho dois p:selectOneMenu, o primeiro recebe o estado e o segundo a cidade.
Porem quando faço um find no cliente ao carregar os dados para a view o p:selectOneMenu da cidade não é carregado com o valor, porém o p:selectOneMenu de estado é carregado normalmente:

Minha view

<p:outputLabel value="Estado" for="Estado"/>
<p:selectOneMenu id="Estado"
				value="#{doadorController.estado}"
				converter="#{estadoConverter}">
		<f:selectItem itemLabel="Selecione ..." noSelectionOption="true"/>
		<f:selectItems value="#{doadorController.estados}"
				var="estado"
				itemLabel="#{estado.nome}"
				itemValue="#{estado}"/>
		<p:ajax update="Cidade, mgs" event="change" listener="#{doadorController.findEstadoById()}"/>
 </p:selectOneMenu>
										
<p:outputLabel value="Cidade" for="Cidade"/>
<p:selectOneMenu value="#{doadorController.cidade}" id="Cidade"
			          converter="#{cidadeConverter}">
		<f:selectItem itemLabel="Selecione ..." noSelectionOption="true"/>
		<f:selectItems value="#{doadorController.cidades}"
					var="cidade"
					itemLabel="#{cidade.nome}"
					itemValue="#{cidade}"/>	
		<p:ajax update="Cidade, mgs" event="change" listener="#{doadorController.findCidadeById()}"/>

</p:selectOneMenu>

Meu controller

public void findByUsuario(){
		try {
			
			doador = this.doadorService.findById(getUsuarioSessao().getDoador().getId());
			//doador = this.doadorService.findById((long) 1);
			
			endereco = this.enderecoService.findByCliente(doador.getId());
			
			getEstados();
			
			cidades = this.cidadeService.findByEstado(endereco.getCidade().getEstado());
			
			this.cidade = this.cidadeService.findById(endereco.getCidade());
			this.estado = cidade.getEstado();
			
		} catch (Exception e) {
			System.err.println("Erro ao doadorController.findByUsuario: " + e.getMessage());
			jsfMessageUtil.sendErrorMessageToUser("Erro ao Buscar Doador");
		}
	}

1 Resposta

Diego_Emmanuell

Para esses casos, gosto de utilizar listas de selectitem, da seguinte forma:

List cidades = new ArrayList; //Lista instanciada;

for(int i= 0; i < listaDeCidadesRetornadaDoFindByEstado.size(); i++){

cidades.add(new SelectItem(idCidade, nomeCidade);

}

this.cidade = idCidade;

Criado 6 de julho de 2017
Ultima resposta 6 de jul. de 2017
Respostas 1
Participantes 2