Usar listas de selecção relaccionadas

Boa tarde pessoal. Tou a usar NetBeans 6.9.1 com JSF 2.0, gerando o CRUD à partir da BD.

Eu tenho o 3 entidades: Pais, Cidade e Rua. O que eu quero é que, no Create.xhtml para Rua, apareça duas listas de selecção, para Pais e Cidade, e uma caixa de texto para Rua. A única que aparece populada é Pais. Ao escolher um Pais, via AJAX, a lista de selecção para Cidade seja populada, isto sem actualizar toda a página.

Podem me ajudar a fazer, ou indicar algum lugar aonde eu possa encontrar material sobre o assunto?

Desde já agradeço.

Só para acrescentar, vi muitos exemplos na net usando RichFaces. Se for possível, gostaria que me indicassem usando o AJAX nativo do JSF 2.0.

kra é o seguinte vou supor q a sua lista de pais esteja vinculada com a de cidades no banco, como eu normalmente uso o hibernate isso facilita bastante, segue o exemplo abaixo:

[code]
<h:selectOneMenu id=“oneSelectPais” value="#{manterFabricanteDecorator.paisSelecionado}" >
<s:selectItems value="#{listaPaises}" var="_pais" label="#{_pais.nome}" noSelectionLabel=""/>
<a4j:support status=“statusAjax” reRender=“oneSelectCidades” event=“onchange” />
<s:convertEntity />
</h:selectOneMenu>

<h:selectOneMenu id=“oneSelectCidades” value="#{manterFabricanteDecorator.cidadeSelecionada}">
<s:selectItems value="#{manterFabricanteDecorator.paisSelecionado.cidades}" var="_cidades" label="#{_cidades.nomeCidade}" noSelectionLabel="" />
<s:convertEntity />
</h:selectOneMenu>[/code]

Obs a linha onde vc vai encontar este comando “a4j:support” ela será a responsável pelo evento quando País for selecionado atualizar a lista de cidades pelo comando reRender=“oneSelectCidades” onde ele vai buscar na sua página o componente que possui o Id igual ao parâmetro informado no reRender e faz um refresh neste componente.

Boas. Como tinha dito no 2º post, prefiro que a ajuda seja usando o AJAX nativo do JSF, pois já estou utilizando o PrimeFaces, e utilizar tbm o RichFaces vai fazer o projecto ficar pesado com muitas bibliotecas. Se eu não me engano, a tag a4j é do RichFaces. Corrija-me se estiver errado.

Obrigado à mesma pela ajuda, e continuo aguardando por mais contribuições.

Bom, kra encontrei este post ele esta usando o f:ajax, espero q ele lhe atenda

http://imasters.com.br/artigo/17146/ajax/ajax_com_jsf_20/

Boas pessoal. Copiei o código de um amigo, mas tá a dar um erro, e gostaria que dessem uma olhada.

Tenho 3 entidades, Rua que depende de Cidade, e Cidade que depende de Pais. No Create.xhtml para Rua, eu tenho 2 listas de selecção, uma para Pais e outra para Cidade. Quando eu escolho um país, através do AJAX a lista de selecção das cidades é carregada automaticamente.

Vou pôr o código relevante para Create.xhtml para Rua, RuaController e CidadeFacade( q contém o método que retorna todas as cidades de um determinado pais ).

Create.xhtml

...
                    <h:selectOneMenu id="pais" [color=red]value="#{ruaController.idPais"[/color] title="#{bundle.CreateRuaTitle_pais}" required="true" requiredMessage="#{bundle.CreateRuaRequiredMessage_pais}">
                        <f:selectItems value="#{paisController.itemsAvailableSelectOne}"/>
                        <f:ajax execute="@this" immediate="true" render="cidade"/>
                    </h:selectOneMenu>

                    <h:selectOneMenu id="cidade" value="#{ruaController.selected.cidade}" title="#{bundle.CreateRuaTitle_cidade}" required="true" requiredMessage="#{bundle.CreateRuaRequiredMessage_cidade}">
                        <f:selectItems value="#{ruaController.cidadesDoPais}"/>
                    </h:selectOneMenu>
...

O código à vermelho é aonde está dando excepção. Fiz assim aí, mas n tenho a certeza que é assim.

RuaController

...
@EJB private session.RuaFacade ejbFacade;
@EJB private session.CidadeFacade cidadeFacade;
private int idPais ;

public SelectItem[] getCidadesDoPais()
    {
       List<Cidade> list = cidadeFacade.todasCidadesDoPais( idPais );

       return JsfUtil.getSelectItems(list, true);
    }

    public void setIdPais( int idPais )
    { this.idPais = idPais ; }

    public int getIdPais()
    {
        return idPais ;
    }
...

CidadeFacade

...
private EntityManager em;

public List<Cidade> todasCidadesDoPais( int idPais )
    {
        Query q = em.createQuery( "select c from Cidade c where c.id_pais = :idPais" );
        q.setParameter( "idPais", idPais);

        return q.getResultList();
    }
...

Creio que ajudar-me assim é mais fácil.

Aguardo por uma resposta.

Bom, vi que o código n ficou vermelho. No Create.xhtml, o código dentro de [color=red][color], na linha 2 é que tá dando erro.

Ninguém tem uma opinião a dar?

FELIZ ANO NOVO PESSOAL.

Quem sabe com esse ano novo, venham novas ideias para me ajudar… tou desesperado!!! Nem sequer passei Revellon à espera de uma solução…