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.