Bom dia,
Alguém saberia me dizer se existe uma forma de se montar combos relacionados que não fosse "na unha" utilizando o JBoss Seam junto com o RichFaces ?
Eu fiz umas tentativas mas não deu mto certo…
o código ficou o seguinte…
ComboAjax.xhtml
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE composition PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:s="http://jboss.com/products/seam/taglib"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:a="http://richfaces.org/a4j"
xmlns:rich="http://richfaces.org/rich"
template="layout/template.xhtml">
<ui:define name="body">
<h:messages styleClass="message"/>
<h:form>
<!-- PAIS -->
<s:decorate id="SelecaoPais" template="layout/edit.xhtml">
<ui:define name="label">País</ui:define>
<h:selectOneMenu id="cb_pais"
value="#{comboPaisEstado.pais}" >
<s:selectItems value="#{paisList.resultList}"
var="pais"
label="#{pais.nome}"
noSelectionLabel="Selecione o país"/>
<s:convertEntity />
<a:support event="onchange"
action="#{comboPaisEstado.onChangePais}"
reRender="SelecaoPais" />
</h:selectOneMenu>
</s:decorate>
<!-- ESTADO -->
<s:decorate id="SelecaoEstado" template="layout/edit.xhtml">
<ui:define name="label">Estado</ui:define>
<h:selectOneMenu id="cb_estado"
value="#{comboPaisEstado.estado}" >
<s:selectItems value="#{comboPaisEstado.pais.estados}"
var="estado"
label="#{estado.nome}"
noSelectionLabel="Selecione o estado"/>
<s:convertEntity />
</h:selectOneMenu>
</s:decorate>
</h:form>
</ui:define>
</ui:composition>
Componente que trabalha o onChange
package session.beans;
import entity.beans.Estado;
import entity.beans.Pais;
import helper.JPAHelper;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import javax.persistence.EntityManager;
import javax.persistence.Query;
import org.jboss.seam.annotations.Name;
@Name("comboPaisEstado")
public class ComboPaisEstado {
/** Creates a new instance of ComboPaisEstado */
public ComboPaisEstado() {
}
/* adicionado */
private Pais pais = new Pais();
private Estado estado = null;
public Pais getPais() {
return pais;
}
public void setPais(Pais pais) {
this.pais = pais;
}
public Estado getEstado() {
return estado;
}
public void setEstado(Estado estado) {
this.estado = estado;
}
public void onChangePais(){
JPAHelper.initEMF();
EntityManager em = JPAHelper.getEntityManager();
Query query = em.createQuery( "select estado from Estado estado where estado.pais.id = :idPais" );
query.setParameter( "idPais", pais.getId() );
Set<Estado> estados = new HashSet<Estado>();
estados.addAll( (List<Estado>) query.getResultList() );
pais.setEstados( estados );
}
}
Pelo site de exemplos do RichFaces não existe nda parecido, assim como na documentação do Seam…
Não queria ter o mesmo trabalho pra fazer isso como nos tempos de Struts 1.2.X onde tinha que montar as funções JS de requisição e de callback…
Se puderem me indicar uma maneira mais tranquila de se fazer isso eu agradeço !