[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<Produto> listarProdutos=null;
private String descricaoProduto="";
private List<Produto> prodSelecionados;
HttpSession session = (HttpSession) FacesContext.getCurrentInstance().getExternalContext().getSession(false);
public List<Produto> getListarProdutos() {
String filialSelecionada = (String) session.getAttribute("filial");
ProdutoRN rn = new ProdutoRN();
listarProdutos = rn.listarProdutos(descricaoProduto,filialSelecionada );
return listarProdutos;
}
public void setListarProdutos(List<Produto> listarProdutos) {
this.listarProdutos = listarProdutos;
}
public String getDescricaoProduto() {
return descricaoProduto;
}
public void setDescricaoProduto(String descricaoProduto) {
this.descricaoProduto = descricaoProduto;
}
public List<Produto> getProdSelecionados() {
return prodSelecionados;
}
public void setProdSelecionados(List<Produto> 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;
}
</style>
<pm:page title="Components">
<!-- Main View -->
<pm:view id="index">
<pm:header title="PESQUISA DE PRODUTOS" swatch="b">
<f:facet name="left"><p:button value="Back" icon="back" href="montagemOrcamento.jsf"/></f:facet>
</pm:header>
<pm:content>
<h:form id="formFiltros">
<p:outputLabel value="Descrição: " />
<p:inputText id="descprod" value="#{produtoBean.descricaoProduto}" />
<p:commandButton value="Consultar" update=":formListarProdutos" />
</h:form>
<hr />
<h:form id="formListarProdutos" >
<p:commandButton value="OK" action="montagemOrcamento.jsf" />
<p:dataList>
<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}">
<p:column selectionMode="multiple" style="width:2%" />
<p:column headerText="Descricao" width="50%">
#{produto.descricaoLonga}
</p:column>
<p:column headerText="Referencia" width="40">
#{produto.codigoInterno}
</p:column>
<p:column headerText="Preço" >
#{produto.precoVen}
</p:column>
</p:dataTable>
</p:dataList>
</h:form>
</pm:content>
</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:
<h:form>
<!-- TABLE QUE IRA APRESENTAR TODOS OS VALORES -->
<p:dataTable value="#{actionBean.tableDataList}" 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" >
<p:spinner max="#{beanApelido.epi_qtd}" value=""/>
</p:column>
<p:column headerText="Quantidade" >#{beanApelido.epi_descricao}</p:column>
<p:column headerText="Total">#{beanApelido.epi_qtd}</p:column>
<p:column headerText="Select">
<!--## PASSANDO OS VALORES DA PROPRIEDADE EPI_COD DO OBEJTO DA ROW EM QUESTAO MAIS O VALOR BOOLEANO(EM STRING) PARA O MAP ## -->
<p:selectBooleanCheckbox value="#{actionBean.selectedRows[beanApelido.epi_cod] }"/>
</p:column>
</p:dataTable>
<h:commandButton value="OK" action="#{actionBean.selectedRowsMap()}"/>
</h:form>
<!-- TABLE QUE IRA APRESENTAR OS VALORES SELECIONADOS DA TABELA ACIMA -->
<h:form>
<p:dataTable value="#{actionBean.selectedRowsList}" 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="Select" style="width: 10%">
<p:commandLink value="Remover"/>
</p:column>
</p:dataTable>
</h:form>
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