Problema datatable Primefaces 3.0RC2

Bom dia,

Estou tentando implementar o meu datatable com selection, eu coloco o atributo rowKey mas mesmo assim da erro:

DataModel must implement org.primefaces.model.SelectableDataModel when selection is enabled.

meu .xhtml:

[code]<p:dataTable id=“workflowTable” var=“workflow” value="#{manageWorkflowsBean.allWorkflows}"
emptyMessage="#{msgs.noRecords}" selectionMode=“single” selection="#{manageWorkflowsBean.selectedWorkflow}"
paginatorPosition=“bottom” paginator=“true” rows=“20” rowKey="#{workflow.key}">

    <p:column filterBy="#{workflow.key}" sortBy="#{workflow.key}">
      <f:facet name="header">
        <h:outputText value="#{msgs.manageWorkflows_workflowName}" />
      </f:facet>
      <h:outputText value="#{workflow.key}" />
    </p:column>...[/code]

meu MB:

[code]@Autowired
private WorkflowRepositoryService workflowRepositoryService;

private String uploadedDeploymentId;
// Manage workflows
private List<ProcessDefinition> allWorkflows;
private ProcessDefinition selectedWorkflow;

@PostConstruct
public void loadWorkflows() {
	log.debug("Loading all the workflows");
	allWorkflows = workflowRepositoryService.getAllWorkflowDefinitions();
}

public ProcessDefinition getSelectedWorkflow() {
	return selectedWorkflow;
}

public void setSelectedWorkflow(ProcessDefinition selectedWorkflow) {
	this.selectedWorkflow = selectedWorkflow;
}

public List<ProcessDefinition> getAllWorkflows() {
	return allWorkflows;
}[/code]

Grato.

veja se isso te ajuda http://www.primefaces.org/showcase-labs/ui/datatableRowSelectionSingle.jsf

Estou seguindo este exemplo mesmo, estou fazendo igual, mas mesmo assim, acontece o erro.

Ola fernandosc

Voce conseguiu resolver isso ?

Se sim, estou tendo o mesmo problema… e nao sei oq esta acontecendo, nem como resolver…

Compartilhe a solução… rsrsrsrs

Obrigada :slight_smile:

Agora podemos criar uma SelectableDataModel. E jogar ela no value da datatable. Segue um exemplo:

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package datamodel;

import java.util.List;
import javax.faces.model.ListDataModel;
import modelo.Pessoa;
import org.primefaces.model.SelectableDataModel;

public class PessoaDM extends ListDataModel<Pessoa> implements SelectableDataModel<Pessoa> {

    public PessoaDM() {
    }

    public PessoaDM(List<Pessoa> data) {
        super(data);
    }

    @Override
    public Pessoa getRowData(String rowKey) {

        List<Pessoa> list = (List<Pessoa>) getWrappedData();

        for (Pessoa obj : list) {
            if (obj.getCodigo_pessoa().equals(Long.valueOf(rowKey))) {
                return obj;
            }
        }

        return null;
    }

    @Override
    public Object getRowKey(Pessoa obj) {
        return obj.getCodigo_pessoa();
    }
}

Obrigada edudebom

Ajudou bastante… eu so nao entendi o pq preciso criar essa classe. Pq nao pra para passar os valores direto para a tabale, como fazia em uma tabela simples em html. E eu preciso passsar essa classe na minha tabela ? OU eu so passando o bean ele ja reconhece essa classe ?

iae pessoal blz

popular da tabela deu certo seguinte esse exemplo, mas estou com um bug

por exemplo ta a tabela la sem usar o FilterValue. filtra bacana porem qdo seleciono os check e executo um actionlistener no retorno ele na recarrega direito a lista por causa do filterby conter valores.

para esse caso parece que se usa o filterValue porem quando eu add ele na datable os filtros não faz o filtro do campos corretamente…

alguem passou por isso??

na datatable deixara como???


<p:dataTable id="tableProdutos" value="#{pnMB.listDataModelProd}" var="q" emptyMessage="No Registry" 
                             paginator="true" rows="50" editable="true"
                              paginatorTemplate= " {CurrentPageReport}  {FirstPageLink} {PreviousPageLink} 
                               {PageLinks} {NextPageLink} {LastPageLink} 
                               {RowsPerPageDropdown}"
                               filteredValue="#{pnMB.listDataModelProdFilter}"
                               selection="#{pnMB.listDataModelProdFilter}" >


 <p:column id="ativo" headerText="Ativo" filterBy="#{????}"  filterMatchMode="startsWith"
                              filterStyle="width: 40px;" >
                        <h:outputText value="#{q.ativo}"/>
                    </p:column>