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.