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…