Pessoal,
tô papando mosca em algum detalhe e por isso tô pendindo ajuda.
Estou usando o Seam 2.2.0GA e JBoss AS 5.1GA.
Não estou conseguindo fazer um exemplo simples de uso do Ajax.
Em uma página, eu tenho um dataTable que lista um conjunto de entidades. Cada entidade possui um checkbox que indica se o objeto vai ser selecionado para processamento. Ao se clicar no objeto, uma chamada ajax é feita adicionando o mesmo a um list, que será utilizado posteriormente para processamento. O problema é que não consigo acessar o método através do componente a4j:support
Eis os códigos
<!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:rich="http://richfaces.org/rich"
xmlns:a4j="http://richfaces.org/a4j"
template="layout/template.xhtml">
<ui:define name="body">
<a4j:form>
<rich:panel>
<f:facet name="header">Lista Embalagens</f:facet>
<div class="results">
<h:outputText value="No produto exists"
rendered="#{empty embalagemForm.embalagensDisponiveis}"/>
<h:dataTable id="embalagemList" var="_embalagem"
value="#{embalagemForm.embalagensDisponiveis}"
rendered="#{not empty embalagemForm.embalagensDisponiveis}">
<h:column>
<f:facet name="header">#{messages['embalagem.id']}</f:facet>
#{_embalagem.id}
</h:column>
<h:column>
<f:facet name="header">#{messages['embalagem.descricao']}</f:facet>
#{_embalagem.descricao}
</h:column>
<h:column>
<h:selectBooleanCheckbox value="#{_embalagem.selecionado}">
<a4j:support action="#{embalagemForm.adicionaEmbalagem(_embalagem)}" event="onclick" ajaxSingle="true">
</a4j:support>
</h:selectBooleanCheckbox>
</h:column>
</h:dataTable>
</div>
</rich:panel>
<div class="actionButtons">
<h:commandButton value="Enviar" action="#{embalagemController.enviaEmbalagens}"/>
</div>
</a4j:form>
</ui:define>
</ui:composition>
package com.sbsi.session.embalagem;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.faces.event.ActionEvent;
import org.jboss.seam.ScopeType;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.Scope;
import com.sbsi.entity.embalagem.Embalagem;
@Name("embalagemForm")
@Scope(ScopeType.CONVERSATION)
public class EmbalagemForm implements Serializable {
private List<Embalagem> embalagensDisponiveis;
private List<Embalagem> embalagensSelecionadas;
public EmbalagemForm() {
embalagensSelecionadas = new ArrayList<Embalagem>();
}
public List<Embalagem> getEmbalagensDisponiveis() {
return embalagensDisponiveis;
}
public void setEmbalagensDisponiveis(List<Embalagem> embalagensDisponiveis) {
this.embalagensDisponiveis = embalagensDisponiveis;
}
public List<Embalagem> getEmbalagensSelecionadas() {
return embalagensSelecionadas;
}
public void setEmbalagensSelecionadas(List<Embalagem> embalagensSelecionadas) {
this.embalagensSelecionadas = embalagensSelecionadas;
}
public void adicionaEmbalagem(Embalagem e) {
if (e.isSelecionado()) {
embalagensSelecionadas.add(e);
} else {
embalagensSelecionadas.remove(e);
}
}
}
package com.sbsi.session.embalagem;
import java.util.List;
import javax.ejb.Remove;
import javax.ejb.Stateful;
import javax.persistence.EntityManager;
import org.jboss.seam.annotations.Destroy;
import org.jboss.seam.annotations.In;
import org.jboss.seam.annotations.Logger;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.Out;
import org.jboss.seam.log.Log;
import com.sbsi.entity.embalagem.Embalagem;
@Stateful
@Name("embalagemController")
public class EmbalagemSessionBean implements EmbalagemBean {
@In
private EntityManager entityManager;
@In(create=true)
@Out(required=false)
private EmbalagemForm embalagemForm;
@Logger
private Log log;
@Remove
@Destroy
public void remove() {
// TODO Auto-generated method stub
}
public void populaEmbalagens() {
List<Embalagem> listaEmbalagens = entityManager.createNamedQuery("todasEmbalagens").getResultList();
embalagemForm.setEmbalagensDisponiveis(listaEmbalagens);
}
public String enviaEmbalagens() {
log.info("{0} embalagens foram selecionadas", embalagemForm.getEmbalagensSelecionadas().size());
return null;
}
}
Omiti a Entidade em si e o arquivo .page.xml por acreditar que estes não interfiram no problema.
Obrigado pela ajuda!
