Dúvida em JSF

9 respostas
Marcio_Nogueira

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. :wink:

9 Respostas

A

cara,

vc faz isso com ajax facilmente.

t+

Marcio_Nogueira

Poderia dar um exemplo de como posso fazer? :wink:

A

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+

Marcio_Nogueira

Mas não teria que utilizar um reRender para carregar a UF correspondente ao estado? :wink:

A

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+

E

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.

Marcio_Nogueira

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>
Marcio_Nogueira

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;
	                }
A

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

Criado 14 de novembro de 2011
Ultima resposta 14 de nov. de 2011
Respostas 9
Participantes 4