Tenho dois SelectOneMenu, sendo um para selecionar o Estado e outro para selecionar a UF.
Minha dúvida é a seguinte: como faço para que ao selecionar o estado a uf seja populada correspondente ao estado selecionado?
Desde já agradeço a atenção. 
Dúvida em JSF
9 Respostas
cara,
vc faz isso com ajax facilmente.
t+
Poderia dar um exemplo de como posso fazer? 
cara,
vc ter algo assim,
<h:selectOneMenu id="cmbEstado" value="#{SEUMB.estado.idEstado}">
<f:selectItem noSelectionOption="true" itemLabel="SELECIONE" itemValue="0"/>
<f:selectItems value="#{SEUMB.listaEstado}" var="estado" itemLabel="#{estado.idEstado}" itemValue="#{estado.nome}"/>
<p:ajax event="change" listener="#{SEUMB.pesquisarCidades}" update="cmbCidade"/>
</h:selectOneMenu>
<h:selectOneMenu id="cmbCidade" value="#{SEUMB.cidade.idCidade}">
<f:selectItem noSelectionOption="true" itemLabel="SELECIONE" itemValue="0"/>
<f:selectItems value="#{SEUMB.listaCidade}" var="cidade" itemLabel="#{cidade.idCidade}" itemValue="#{cidade.nome}"/>
</h:selectOneMenu>
t+
Mas não teria que utilizar um reRender para carregar a UF correspondente ao estado? 
esse exemplo que eu te passei seria JSF 2 + Primefaces, no seu caso vc deve ta usando richfaces, mas a ideia é a mesma, mas no seu caso vc vai utilizar a4j:support com reRender.
t+
uma coisa, no exemplo anterior, se você estiver usando JSF2 usa a tag f:ajax no lugar da p:ajax. Não sei se é assim mesmo, mas a p:ajax só atualiza componentes primefaces, e o f:ajax só atualiza componentes jsf.
Se estiver usando JSF1.2 com Richfaces, usa o a4j:support.
O p:ajax, no lugar do reRender, tem o parametro update, faz a mesma coisa.
O a4j:support tem o reRender que você falou.
O f:ajax no lugar do reRender tem render.
Não sei de outras libs do jsf.
Por enquanto estou escrevendo os componentes:
<h:outputLabel value="Estado:" />
<h:selectOneMenu id="mnuEstado" required="true" requiredMessage="selecione o estado de origem!" value="#{cliente.estado}"
valueChangeListener="">
<f:selectItem itemLabel="Selecione..." itemValue="0"/>
<f:selectItems/>
</h:selectOneMenu>
<h:outputLabel value="UF:" />
<h:selectOneMenu id="mnuUf" value="#{cliente.uf}">
<f:selectItem itemLabel="Selecione..." itemValue="0"/>
<f:selectItems/>
</h:selectOneMenu>
O código do meu bean está assim:
public List<SelectItem> getUfs() {
ufs = new ArrayList<SelectItem>();
ufs.add(new SelectItem("1","SP"));
ufs.add(new SelectItem("2","ES"));
ufs.add(new SelectItem("3","MG"));
ufs.add(new SelectItem("4","RJ"));
return ufs;
}
Boa tarde Marcio.
Então, você está trabalhando com qual versão do JSF ?? 1.2 ou 2.0 ?? Rich ou Prime ??
Pelo que entendi, dá forma que você está fazendo, você terá que executar algum método para preencher a UF assim que o usuário escolher um estado. Ou seja, você terá que fazer um monte de if para saber qual estado foi escolhido e exibir a UF correspondente.
Essa relação que você criou, pessoa-estado e pessoa-uf, você acha que tá certo ?
Sugestão:
Não seria melhor você criar um objeto Estado e ele sim possuir uma UF ? Assim no seu código, você poderia sempre referenciar um Estado e a UF que esse estado possui, acho que seria mais fácil, não ?
Exemplo:
Combo Estado:
<h:selectOneMenu id="mnuEstado" required="true" requiredMessage="selecione o estado de origem!" value="#{cliente.estado}"
Combo UF:
<h:selectOneMenu id="mnuUf" value="#{cliente.estado.uf}">
E para atualizar o combo você segue o que o evefuji falou …
Acho que é isso.
[]'s