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.
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 
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>