Galera, boa tarde !!!
estou com problemas na hora de selecionar o registro de um rich:dataTable com paginação por demanda usando SEAM.
Meu Managed Bean:
package br.com.bb.acesso.bean;
import java.util.List;
import javax.faces.component.UIData;
import javax.faces.event.ActionEvent;
import javax.faces.model.DataModel;
import org.jboss.seam.ScopeType;
import org.jboss.seam.annotations.In;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.Out;
import org.jboss.seam.annotations.Scope;
import org.jboss.seam.annotations.datamodel.DataModelSelection;
import br.com.bb.acesso.entidade.Usuario;
import br.com.bb.acesso.session.local.UsuarioSessionLocal;
import br.com.bb.components.PagedDataModel;
@Name("usuarioBean")
@Scope(ScopeType.EVENT)
public class UsuarioBean extends BaseBean{
private static final long serialVersionUID = -5160513194906478318L;
@org.jboss.seam.annotations.datamodel.DataModel
List<Usuario> usuarios;
@In(create=true)
private UsuarioSessionLocal usuarioSessionLocal;
private PagedDataModel pagedDataModel;
@In(create = true)
private UIData table;
private DataModel tableModel;
@DataModelSelection
private Usuario usuarioSelecionado;
@In(required=false)
@Out(required=false)
private Usuario usuario;
public DataModel getTableModel(){
if (pagedDataModel == null) {
int totalSize = 0;
int first = 0;
int rows = 5;
if(table != null){
first = table.getFirst();
rows = table.getRows();
}
try {
//consulta a lista de usuarios passando o numero do primeiro resultado, e o numero de linhas para mostrar
usuarios = usuarioSessionLocal.getUsuarios(first, rows);
//consulta o numero total de usuarios cadastrados no banco
totalSize = usuarioSessionLocal.getTotalUsuarios().intValue();
} catch (Exception e) {
e.printStackTrace();
}
// retorna o datamodel com a lista, o numero total e o numero por página
return pagedDataModel = new PagedDataModel(usuarios, totalSize, rows);
}
return pagedDataModel;
}
public String editarUsuario() {
usuario = usuarioSelecionado;
return "editarUsuario";
}
public Usuario selecionarUsuario(ActionEvent event) {
return usuarioSelecionado;
}
}
.xhtml
<!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="/resources/template/default.xhtml"
xmlns:dem="http://facelets.bb.com">
<ui:define name="tituloNavegacao">
<h1 class="cont">
<span> <h:outputText value="Manter Usuário" /> </span>
</h1>
</ui:define>
<ui:define name="conteudo">
<rich:spacer height="10"></rich:spacer>
<a4j:form id="lista_form" rendered="true">
<rich:panel>
<rich:dataTable width="940px" id="tabelaPaginada"
value="#{usuarioBean.tableModel}" rows="5" var="usuario"
binding="#{table}"
columnClasses="alignLeft, alignLeft, alignLeft, alignCenter, alignCenter"
onRowMouseUp="this.style.backgroundColor='#9C9C9C'" sortMode="single">
<a4j:support event="onRowClick" actionListener="#{usuarioBean.selecionarUsuario}" />
<rich:column>
<f:facet name="header">
<h:outputLabel value="LOGIN" />
</f:facet>
<h:outputText value="#{usuario.login}" />
</rich:column>
<rich:column>
<f:facet name="header">
<h:outputLabel value="SENHA" />
</f:facet>
<h:outputText value="#{usuario.senha}" />
</rich:column>
</rich:dataTable>
<rich:datascroller for="tabelaPaginada" maxPages="2" />
</rich:panel>
<rich:spacer height="10" />
<rich:panel bodyClass="rich-laguna-panel-no-header">
<a4j:commandButton value="Cadastrar"
action="#{usuarioBean.incluirUsuario}" />
<rich:spacer height="5" />
<a4j:commandButton value="Editar"
action="#{usuarioBean.editarUsuario}" />
<rich:spacer height="5" />
<a4j:commandButton value="Voltar" action="home" />
</rich:panel>
</a4j:form>
<rich:spacer height="40" />
</ui:define>
</ui:composition>
Qdo. o usuario seleciona a linha e clica em editar, a lista usuarios que está com o @DataModel vem preenchido certo, mas o atributo usuarioSelecionado (que está com o @DataModelSelection) vem sempre com o primeiro registro na tabela.
Não consigo trazer todos os objetos da lista, só o primeiro.
Alguém ja teve esse problema ??? Tive esse problema depois que implementei a paginação por demanda.
Qualquer ajuda será válida.
Abraço,