Combos Aninhados

Alguem sabe d algum script ajax sei lah q funcione assim:
Tendo selecionado um item em um combo, um segundo combo seria preenchido com os subitens do combo pai
Tipo assim:
Tenho um combo com generos d filmes (acao, ficcao, aventura…). Dependendo do genero escolido, o combo filho seria carregado com os filmes deste genero.
Entenderam?!

Alguem pode me ajudar?

Se estiver usando RichFaces e JBoss Seam esse tópico pode ajudar.
Qualquer coisa se estiver fazendo na unha, tenho um exemplo no trabalho, daí qualquer coisa segunda-feira eu posto aqui.
Abraço

Valeu amigo!!
mas passa aew o seu codigo pq to fazendo no braço mesmo!

Oi Marlon,

sugiro que vc use o RichFaces + Ajas4Jsf. Aí a coisa fica bem simples.
Por exemplo:

[code]<h:selectOneMenu id=“estado” value="#{bean.estado}">
<a4j:support action="#{bean.selecionaCidade}“event=“onchange”
reRender=“cidade” />
<f:selectItems value=”#{bean.listaEstados}" />
</h:selectOneMenu>

<h:selectOneMenu id=“cidade” value="#{bean.cidade}">
<f:selectItems value="#{bean.listaCidades}" />
</h:selectOneMenu>[/code]

No exemplo acima quando vc clica no select de estados, a tag a4j:support ele chama um action no bean para selecionar as cidades daquele estado.
e manda renderizar o combo de cidades.
Tudo isso via ajax, sem dar submit no form.

Qualquer dúvida poste aí.

Olá!
maurenginaldo , vc conseguiu resolver este problema?

Estou passando por uma situação semelhante, tenho 2 combobox, mas não consigo obter o valor do primeiro para carregar o segundo com os valores corretos, veja:

		<h:outputText value="Pais"/>
		<h:selectOneMenu id="pais"
		                 value="#{clubesMb.clube.pais}">

			<f:selectItem value="#{clubesMb.allCountrys}"/>

			<a4j:support event="onchange"				
						 action="#{clubesMb.onAct}"		 
						 reRender="estado"
						 immediate="true"/>
		</h:selectOneMenu>

		<h:outputText value="Estado"/>
		<h:selectOneMenu id="estado"
						 value="#{clubesMb.clube.estado.nome}">
			<f:selectItems value="#{clubesMb.estados}"/>
		</h:selectOneMenu>

O backingbean está assim:

	public SelectItem[] getAllCountrys(){
		return (region.getPaises());
	}

	public void onAct(){
		int id_pais = clube.getPais().getId_pais();
		System.out.println("no action: " + clube.getPais().getId_pais() );
		estados = region.getEstadosByPais(id_pais);
	}

valeu!

Vc está usando o componente errado:

[code]<f:selectItem value="#{clubesMb.allCountrys}"/>

//use

<f:selectItems value="#{clubesMb.allCountrys}"/>
[/code]

Eu consegui resolver temporáriamente o problema, seguindo o que vc fez, feito desta maneira quando meus campos são marcados como requiridos direto na tag, ao fazer o onchange=“submit” esses campos são validados e as mensagens aparecem, existe alguma outra forma de resolver este problema??

Veja este é o formulário, em anexo estão as telas.

...
<h:outputText value="Clube"/>
<h:inputText value="#{clubesMb.clube.nm_clube}" size="70" required="true" requiredMessage="Nome inválido.">
	<f:validateLength maximum="299"/>
</h:inputText>

<h:outputText value="Apelido"/>
<h:inputText value="#{clubesMb.clube.ds_apelido}" size="35">
	<f:validateLength maximum="199"/>
</h:inputText>

<h:outputText value="Cores"/>
<h:inputText value="#{clubesMb.clube.ds_cores}" size="35" required="true" requiredMessage="Cores inválido.">
	<f:validateLength maximum="100"/>
</h:inputText>

<h:outputText value="Data Fundação"/>
<rich:calendar datePattern="dd/MM/yyyy" required="true" requiredMessage="Data inválida."/>

<h:outputText value="Pais"/>
<h:selectOneMenu id="pais" 
				 value="#{clubesMb.clube.pais.id_pais}"
				 valueChangeListener="#{clubesMb.onAct}"
				 rendered="true"
				 onchange="submit()">						 
	<f:selectItems value="#{clubesMb.allCountrys}"/>
</h:selectOneMenu>

<h:outputText value="Estado"/>
<h:selectOneMenu id="estado" value="#{clubesMb.clube.estado.id_estado}">
	<f:selectItems value="#{clubesMb.estados}"/>
</h:selectOneMenu>
...

Muito obrigado!



Porque vc quer resolver o problema de outra forma?

Não quero que ao fazer o reload do formulário para carregar o combobox os campos sejam validados, já que na prática o usuário final não solicitou alguma ação como Gravar/Atualizar, entendeu?

Gostaria que os combobox fossem carregados sem que a validação do formulário fosse ativada.

É, nesse caso vc vai ter tirar o “submit” e utilizar alguma tag ajax com o atributo imediate=true para fazer o carregamento dos select’s.

Pronto, resolvido dessa maneira:

<h:outputText value="Pais"/>
<h:selectOneMenu id="pais"
				 rendered="true"
				 value="#{clubesMb.clube.pais.id_pais}">

	<f:selectItems value="#{clubesMb.allCountrys}"/>
	<a4j:support event="onchange" 
				 ajaxSingle="true"
				 action="#{clubesMb.actChangeCountry}"
				 reRender="pais,estado"/>
</h:selectOneMenu>

<h:outputText value="Estado"/>
<h:selectOneMenu id="estado" 
				 value="#{clubesMb.clube.estado.id_estado}"
				 rendered="true">
	<f:selectItems value="#{clubesMb.estados}"/>
</h:selectOneMenu>

No backingbean fiz o método de action para o onChange assim:

public String actChangeCountry(){
	estados = region.getEstadosByPais( getClube().getPais().getId_pais() );
	return Util.SUCCESS;
}

Valeuzão pela atenção aí!

podem me dar uma ajudinha? estou passando pelo problema de não conseguir renderizar…

to pegando esse erro

14:09:16,391 ERROR [viewhandler] Error Rendering View[/page/users.xhtml]
javax.faces.FacesException: javax.el.ELException: /page/users.xhtml @48,106 value="#{stateList.statesByCountry}": Error reading 'statesByCountry' on type org.javassist.tmp.java.lang.Object_$$_javassist_seam_3
	at javax.faces.component.UISelectItems.getValue(UISelectItems.java:144)
	at org.jboss.seam.ui.component.UISelectItems.getValue(UISelectItems.java:161)
	at com.sun.faces.renderkit.RenderKitUtils.getSelectItems(RenderKitUtils.java:289)
	at com.sun.faces.renderkit.html_basic.MenuRenderer.renderSelect(MenuRenderer.java:814)
	at com.sun.faces.renderkit.html_basic.MenuRenderer.encodeEnd(MenuRenderer.java:280)
	at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:861)
	at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.encodeRecursive(HtmlBasicRenderer.java:242)
	at com.sun.faces.renderkit.html_basic.GridRenderer.renderRow(GridRenderer.java:180)
	at com.sun.faces.renderkit.html_basic.GridRenderer.encodeChildren(GridRenderer.java:127)
	at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:837)
	at org.jboss.seam.ui.util.cdk.RendererBase.renderChild(RendererBase.java:186)
	at org.jboss.seam.ui.util.cdk.RendererBase.renderChildren(RendererBase.java:166)
	at org.jboss.seam.ui.renderkit.ValidateAllRendererBase.doEncodeChildren(ValidateAllRendererBase.java:33)
	at org.jboss.seam.ui.util.cdk.RendererBase.encodeChildren(RendererBase.java:92)
	at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:837)
	at org.ajax4jsf.renderkit.RendererBase.renderChild(RendererBase.java:282)
	at org.ajax4jsf.renderkit.RendererBase.renderChildren(RendererBase.java:262)
	at org.richfaces.renderkit.html.PanelRenderer.doEncodeChildren(PanelRenderer.java:220)
	at org.richfaces.renderkit.html.PanelRenderer.doEncodeChildren(PanelRenderer.java:215)
	at org.ajax4jsf.renderkit.RendererBase.encodeChildren(RendererBase.java:121)

roanbrasil, eu consegui resolver os problemas com o Dropdown, veja este post, acho que vai te ajudar:

http://www.lucianosilva.com/2008/08/11/jsf-richfaces-ajax-e-combobox-alinhados/

Abraço.

ah estou vendo ele, mas o ruim q estou usando o JBOSS SEAM… vou ver se dessa forma da pra implementar…

cara fiz igual o exemplo lá q vc postou e tá dando esse erro

 Expected a child component type of UISelectItem/UISelectItems for component type javax.faces.SelectOne(state).  Found null.