Problema com DataTable + CheckBox JSF

Galera tenho a seguinte tabela com PrimeFaces:

<p:dataTable value="#{actionBean.listaEPI}" var="beanApelido" style="width:50%">
        <p:column headerText="Codigo">#{beanApelido.epi_cod}</p:column>
        <p:column headerText="Nome" >#{beanApelido.epi_nome}</p:column>
        <p:column headerText="Descricao" >#{beanApelido.epi_descricao}</p:column>
        <p:column headerText="Quantidade" >#{beanApelido.epi_qtd}</p:column>
        <p:column headerText="Seleção" >
            <p:selectBooleanCheckbox value="???????????"/>
        </p:column>
</p:dataTable>

O preenchimento dela está tudo OK, porém repare que na ultima coluna estou usando um SelectBooleanCheckBox. Quando o usuário clicar em um botão qualquer na página, preciso que que redirecione para outra pagina contendo uma mesma tabela desta porém que irá mostrar apenas os valores das linhas da tabela que foram selecionadas pelo checkBox.

Alguem tem alguma idéia de como eu possa fazer isso ?

Desde já agradeço a todos !

Amigo, chegou a ver este exemplo: http://www.primefaces.org/showcase/ui/datatableRowSelectionRadioCheckbox.jsf

Ele te ensina a selesionar as cosias, e no seu caso, guardar num List desses elementos ( utilizando SessionScoped, claro ), e daí, vais pegando todos que ele seleciona e insere nesse List, onde a tua outra tabela será o valor desse List.

[quote=darksteel3000]Amigo, chegou a ver este exemplo: http://www.primefaces.org/showcase/ui/datatableRowSelectionRadioCheckbox.jsf

Ele te ensina a selesionar as cosias, e no seu caso, guardar num List desses elementos ( utilizando SessionScoped, claro ), e daí, vais pegando todos que ele seleciona e insere nesse List, onde a tua outra tabela será o valor desse List.[/quote]

Olá amigo,

Estou tentando usar este componente dentro de uma aplicação com o PrimeFaces Mobile e tem algo muito estranho acontecendo. No meu Bean criei um lista para mostra todos os produtos e receber os produtos selecionados pelo checkbox na datatable e quando na .xhtml quando coloco a opção selection="#{produtoBean.produtosSelecionados}" ele traz em branco, quando tiro lista todos os produtos normalmente.

Meu Bean:

@ManagedBean(name="produtoBean")
@ViewScoped
public class ProdutoBean implements Serializable{
    private List&lt;Produto&gt; listarProdutos=null;
    private String descricaoProduto="";
    private List&lt;Produto&gt; prodSelecionados;
   HttpSession session =  (HttpSession) FacesContext.getCurrentInstance().getExternalContext().getSession(false);

    public List&lt;Produto&gt; getListarProdutos() {
        String filialSelecionada = (String) session.getAttribute("filial");
       
        ProdutoRN rn = new ProdutoRN();
        listarProdutos = rn.listarProdutos(descricaoProduto,filialSelecionada );
        
        return listarProdutos;
    }
 
    public void setListarProdutos(List&lt;Produto&gt; listarProdutos) {
        this.listarProdutos = listarProdutos;
    }

    public String getDescricaoProduto() {
        return descricaoProduto;
    }

    public void setDescricaoProduto(String descricaoProduto) {
        this.descricaoProduto = descricaoProduto;
    }


    public List&lt;Produto&gt; getProdSelecionados() {
        return prodSelecionados;
    }

    public void setProdSelecionados(List&lt;Produto&gt; prodSelecionados) {
        this.prodSelecionados = prodSelecionados;
    }

E aqui esta minha view:

&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;!--
To change this template, choose Tools | Templates
and open the template in the editor.
--&gt;
&lt;!DOCTYPE html&gt;
&lt;f:view xmlns="http://www.w3.org/1999/xhtml"
        xmlns:f="http://java.sun.com/jsf/core"
        xmlns:h="http://java.sun.com/jsf/html"
        xmlns:ui="http://java.sun.com/jsf/facelets"
        xmlns:p="http://primefaces.org/ui"
        xmlns:pm="http://primefaces.org/mobile"
        contentType="text/html"
        renderKitId="PRIMEFACES_MOBILE"&gt;
     &lt;style type="text/css"&gt;   
        .ui-datatable .ui-datatable-data .even-row td{  
            background-color:#EEE9E9;  
        }  
  
        .ui-datatable .ui-datatable-data .odd-row td{  
            background-color:#CDC9C9;  
        }  
                &lt;/style&gt;  
   
    &lt;pm:page title="Components"&gt;
       
         &lt;!-- Main View --&gt;
        &lt;pm:view id="index"&gt;
            &lt;pm:header title="PESQUISA DE PRODUTOS" swatch="b"&gt;
                &lt;f:facet name="left"&gt;&lt;p:button value="Back" icon="back" href="montagemOrcamento.jsf"/&gt;&lt;/f:facet&gt;
            &lt;/pm:header&gt;
        &lt;pm:content&gt;
            &lt;h:form id="formFiltros"&gt;
               
                &lt;p:outputLabel value="Descrição: " /&gt;
                &lt;p:inputText id="descprod" value="#{produtoBean.descricaoProduto}" /&gt;
                &lt;p:commandButton value="Consultar" update=":formListarProdutos" /&gt;
            &lt;/h:form&gt;
            
            &lt;hr /&gt;
            &lt;h:form id="formListarProdutos" &gt;
                &lt;p:commandButton value="OK" action="montagemOrcamento.jsf" /&gt;
               &lt;p:dataList&gt;
                  
                   &lt;p:dataTable id="multiprods" var="produto" value="#{produtoBean.listarProdutos}" emptyMessage="Nenhum registro encontrado." 
                                 rowStyleClass="#{empty rowIx or rowIx mod 2 ne 0 ? 'even-row' : 'odd-row'}" rowIndexVar="rowIx"
                                 selection="#{produtoBean.produtosSelecionados}"&gt; 
                       
                        &lt;p:column selectionMode="multiple" style="width:2%" /&gt;  

                        &lt;p:column headerText="Descricao" width="50%"&gt;
                             #{produto.descricaoLonga}
                        &lt;/p:column&gt;
                        
                        &lt;p:column headerText="Referencia" width="40"&gt;
                           
                            #{produto.codigoInterno} 
                           
                        &lt;/p:column&gt;
                        
                        &lt;p:column headerText="Preço" &gt;
                            #{produto.precoVen} 
                        &lt;/p:column&gt;
                        
                                                
                    &lt;/p:dataTable&gt;
                
                  
                    
               &lt;/p:dataList&gt;
                
                 
            &lt;/h:form&gt;
            
       &lt;/pm:content&gt;   
         
   &lt;/pm:view&gt;
       
&lt;/pm:page&gt;
&lt;/f:view&gt;

[quote=gnucleber][quote=darksteel3000]Amigo, chegou a ver este exemplo: http://www.primefaces.org/showcase/ui/datatableRowSelectionRadioCheckbox.jsf

Ele te ensina a selesionar as cosias, e no seu caso, guardar num List desses elementos ( utilizando SessionScoped, claro ), e daí, vais pegando todos que ele seleciona e insere nesse List, onde a tua outra tabela será o valor desse List.[/quote]

Olá amigo,

Estou tentando usar este componente dentro de uma aplicação com o PrimeFaces Mobile e tem algo muito estranho acontecendo. No meu Bean criei um lista para mostra todos os produtos e receber os produtos selecionados pelo checkbox na datatable e quando na .xhtml quando coloco a opção selection="#{produtoBean.produtosSelecionados}" ele traz em branco, quando tiro lista todos os produtos normalmente.

Meu Bean:

@ManagedBean(name="produtoBean")
@ViewScoped
public class ProdutoBean implements Serializable{
    private List&lt;Produto&gt; listarProdutos=null;
    private String descricaoProduto="";
    private List&lt;Produto&gt; prodSelecionados;
   HttpSession session =  (HttpSession) FacesContext.getCurrentInstance().getExternalContext().getSession(false);

    public List&lt;Produto&gt; getListarProdutos() {
        String filialSelecionada = (String) session.getAttribute("filial");
       
        ProdutoRN rn = new ProdutoRN();
        listarProdutos = rn.listarProdutos(descricaoProduto,filialSelecionada );
        
        return listarProdutos;
    }
 
    public void setListarProdutos(List&lt;Produto&gt; listarProdutos) {
        this.listarProdutos = listarProdutos;
    }

    public String getDescricaoProduto() {
        return descricaoProduto;
    }

    public void setDescricaoProduto(String descricaoProduto) {
        this.descricaoProduto = descricaoProduto;
    }


    public List&lt;Produto&gt; getProdSelecionados() {
        return prodSelecionados;
    }

    public void setProdSelecionados(List&lt;Produto&gt; prodSelecionados) {
        this.prodSelecionados = prodSelecionados;
    }

E aqui esta minha view:

[code]
<?xml version=“1.0” encoding=“UTF-8”?>
<!–
To change this template, choose Tools | Templates
and open the template in the editor.
–>
<!DOCTYPE html>
<f:view xmlns="http://www.w3.org/1999/xhtml"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:p="http://primefaces.org/ui"
xmlns:pm="http://primefaces.org/mobile"
contentType="text/html"
renderKitId=“PRIMEFACES_MOBILE”>
<style type=“text/css”>
.ui-datatable .ui-datatable-data .even-row td{
background-color:#EEE9E9;
}

    .ui-datatable .ui-datatable-data .odd-row td{  
        background-color:#CDC9C9;  
    }  
            &lt;/style&gt;  

&lt;pm:page title="Components"&gt;
   
     &lt;!-- Main View --&gt;
    &lt;pm:view id="index"&gt;
        &lt;pm:header title="PESQUISA DE PRODUTOS" swatch="b"&gt;
            &lt;f:facet name="left"&gt;&lt;p:button value="Back" icon="back" href="montagemOrcamento.jsf"/&gt;&lt;/f:facet&gt;
        &lt;/pm:header&gt;
    &lt;pm:content&gt;
        &lt;h:form id="formFiltros"&gt;
           
            &lt;p:outputLabel value="Descrição: " /&gt;
            &lt;p:inputText id="descprod" value="#{produtoBean.descricaoProduto}" /&gt;
            &lt;p:commandButton value="Consultar" update=":formListarProdutos" /&gt;
        &lt;/h:form&gt;
        
        &lt;hr /&gt;
        &lt;h:form id="formListarProdutos" &gt;
            &lt;p:commandButton value="OK" action="montagemOrcamento.jsf" /&gt;
           &lt;p:dataList&gt;
              
               &lt;p:dataTable id="multiprods" var="produto" value="#{produtoBean.listarProdutos}" emptyMessage="Nenhum registro encontrado." 
                             rowStyleClass="#{empty rowIx or rowIx mod 2 ne 0 ? 'even-row' : 'odd-row'}" rowIndexVar="rowIx"
                             selection="#{produtoBean.produtosSelecionados}"&gt; 
                   
                    &lt;p:column selectionMode="multiple" style="width:2%" /&gt;  

                    &lt;p:column headerText="Descricao" width="50%"&gt;
                         #{produto.descricaoLonga}
                    &lt;/p:column&gt;
                    
                    &lt;p:column headerText="Referencia" width="40"&gt;
                       
                        #{produto.codigoInterno} 
                       
                    &lt;/p:column&gt;
                    
                    &lt;p:column headerText="Preço" &gt;
                        #{produto.precoVen} 
                    &lt;/p:column&gt;
                    
                                            
                &lt;/p:dataTable&gt;
            
              
                
           &lt;/p:dataList&gt;
            
             
        &lt;/h:form&gt;
        
   &lt;/pm:content&gt;   

</pm:view>

</pm:page>
</f:view>

[/code][/quote]

Cara não sei se eu deixei passar batido, mas onde está o metodo que irá carregar sua lista “prodSelecionados” ??, e outra coisa, na sua view, não deveria ser:

Ao invés de:

Bom, apesar de ter dado uma olhada nestes exemplos do site do primefaces, eu acabei optando pelo que eu encontrei no site do BalusC: http://balusc.blogspot.com.br/2006/06/communication-in-jsf.html
Ele se baseia na identificação das linhas selecionadas através de MAP… achei muito elegante a implementação, segue meu exemplo:

&lt;h:form&gt;
            &lt;!-- TABLE QUE IRA APRESENTAR TODOS OS VALORES --&gt;
            &lt;p:dataTable value="#{actionBean.tableDataList}" var="beanApelido" style="width: 50%"&gt;
                &lt;p:column headerText="Codigo" &gt;#{beanApelido.epi_cod}&lt;/p:column&gt;
                &lt;p:column headerText="Nome" &gt;#{beanApelido.epi_nome}&lt;/p:column&gt;
                &lt;p:column headerText="Descricao" &gt;
                    &lt;p:spinner max="#{beanApelido.epi_qtd}" value=""/&gt;
                &lt;/p:column&gt;
                &lt;p:column headerText="Quantidade" &gt;#{beanApelido.epi_descricao}&lt;/p:column&gt;
                &lt;p:column headerText="Total"&gt;#{beanApelido.epi_qtd}&lt;/p:column&gt;
                &lt;p:column headerText="Select"&gt;
                    &lt;!--## PASSANDO OS VALORES DA PROPRIEDADE EPI_COD DO OBEJTO DA ROW EM QUESTAO MAIS O VALOR BOOLEANO(EM STRING) PARA O MAP ## --&gt;
                    &lt;p:selectBooleanCheckbox value="#{actionBean.selectedRows[beanApelido.epi_cod] }"/&gt;
                &lt;/p:column&gt;
            &lt;/p:dataTable&gt;
            &lt;h:commandButton value="OK" action="#{actionBean.selectedRowsMap()}"/&gt;
        &lt;/h:form&gt;

        &lt;!-- TABLE QUE IRA APRESENTAR OS VALORES SELECIONADOS DA TABELA ACIMA --&gt;
  &lt;h:form&gt;
            &lt;p:dataTable value="#{actionBean.selectedRowsList}" var="beanApelido" style="width: 50%"&gt;
                &lt;p:column headerText="Codigo" &gt;#{beanApelido.epi_cod}&lt;/p:column&gt;
                &lt;p:column headerText="Nome" &gt;#{beanApelido.epi_nome}&lt;/p:column&gt;
                &lt;p:column headerText="Descricao" &gt;#{beanApelido.epi_descricao}&lt;/p:column&gt;
                &lt;p:column headerText="Quantidade"&gt;#{beanApelido.epi_qtd}&lt;/p:column&gt;
                &lt;p:column headerText="Select" style="width: 10%"&gt;
                    &lt;p:commandLink value="Remover"/&gt;
                &lt;/p:column&gt;
            &lt;/p:dataTable&gt;
        &lt;/h:form&gt;

Aqui o metodo que irá pegar os valores selecionados

public void selectedRowsMap()
    {
        //itera na List de EpiBean
        for(EpiBean epi : tableDataList)
        {
            log.info(String.valueOf(selectedRows.get(epi.getEpi_cod())));
            //Pega os valores do MAP (KEY=epi_cod VALUE=true/false) e verifica se estao selecionados
            if(selectedRows.get(epi.getEpi_cod()).equals("true"))
            {
                // Carrega a lista com os valores a serem apresentados
                selectedRowsList.add(epi);
                selectedRows.remove(epi.getEpi_cod());
            }
        }
    }

Qualquer coisa só retornar !
Abraços