Primefaces 3.4.1 problema no datatable com checkbox (RESOLVIDO)

Bom dia a todos. Bem já tentei de várias formas entender a implementação do check box na datatable, mais está impossível. O que existe no showcase peguei ele mais na hora de entrar no metodo construtor ele simplesmente não entra para popular a lista, mais pelo menos renderiza o datatable vazio. Agora na minha aplicação que estou tentando implementar isso simplesmente mostra página em branco e com seguinte erro no glassfish 3:

SEVERE: Error Rendering View[/formLote.xhtml]
javax.faces.FacesException: DataModel must implement org.primefaces.model.SelectableDataModel when selection is enabled.
at org.primefaces.component.datatable.DataTable.getRowKeyFromModel(DataTable.java:780)
at org.primefaces.component.datatable.DataTableRenderer.encodeRow(DataTableRenderer.java:661)
at org.primefaces.component.datatable.DataTableRenderer.encodeTbody(DataTableRenderer.java:601)
at org.primefaces.component.datatable.DataTableRenderer.encodeRegularTable(DataTableRenderer.java:220)
at org.primefaces.component.datatable.DataTableRenderer.encodeMarkup(DataTableRenderer.java:192)
at org.primefaces.component.datatable.DataTableRenderer.encodeEnd(DataTableRenderer.java:74)
at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:875)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1764)
at javax.faces.render.Renderer.encodeChildren(Renderer.java:168)
at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:845)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1757)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1760)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1760)
at com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:402)
at com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:131)
at javax.faces.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:288)
at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:121)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:594)
at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1550)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:343)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:217)
at br.com.wgs.util.CharacterEncodingFilter.doFilter(CharacterEncodingFilter.java:64)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:256)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:217)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:279)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:655)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:595)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:161)
at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:331)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:231)
at com.sun.enterprise.v3.services.impl.ContainerMapper$AdapterCallable.call(ContainerMapper.java:317)
at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:195)
at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:860)
at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:757)
at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1056)
at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:229)
at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137)
at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104)
at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90)
at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79)
at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54)
at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59)
at com.sun.grizzly.ContextTask.run(ContextTask.java:71)
at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532)
at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513)
at java.lang.Thread.run(Thread.java:722)

Nesse erro e pelo exemplo fala para fazer uma classe implementando um SelectableDataModel e segue ele abaixo:

[code]package br.com.wgs.model;

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

/**
*

  • @author Lesliê Cardoso da Silva

  • @since 04/05/2013
    */
    public class LoteDataModel extends ListDataModel implements SelectableDataModel {

    public LoteDataModel(List data) {
    super(data);
    }

    @Override
    public Lote getRowData(String rowKey) {
    List lotes = (List) getWrappedData();

     for(Lote lote : lotes) {
         if(lote.getNumeroPatrimonio().equals(rowKey)){                
             return lote;
         }
     }
     return null;
    

    }

    @Override
    public Object getRowKey(Lote lote) {
    return lote.getNumeroPatrimonio();
    }
    }[/code]

Meu Model

[code]package br.com.wgs.model;

import java.io.Serializable;

/**
*

  • @author Lesliê Cardoso da Silva
    */
    public class Lote implements Serializable{
    private static final long serialVersionUID = -7641485079661156472L;
    private Long idLote;
    private Situacao situacao;
    private Item item;
    private Produto produto;
    private String numeroPatrimonio;

    public Produto getProduto() {
    if(produto == null){
    produto = new Produto();
    }
    return produto;
    }

    public void setProduto(Produto produto) {
    this.produto = produto;
    }

    public Long getIdLote() {
    if(idLote == null){
    idLote = new Long(-1);
    }
    return idLote;
    }

    public void setIdLote(Long idLote) {
    this.idLote = idLote;
    }

    public Situacao getSituacao() {
    if(situacao == null){
    situacao = new Situacao();
    }
    return situacao;
    }

    public void setSituacao(Situacao situacao) {
    this.situacao = situacao;
    }

    public Item getItem() {
    if(item == null){
    item = new Item();
    }
    return item;
    }

    public void setItem(Item item) {
    this.item = item;
    }

    public String getNumeroPatrimonio() {
    if(numeroPatrimonio == null){
    numeroPatrimonio = new String();
    }
    return numeroPatrimonio;
    }

    public void setNumeroPatrimonio(String numeroPatrimonio) {
    this.numeroPatrimonio = numeroPatrimonio;
    }
    }[/code]

segue meu xhtml

[code]<ui:composition xmlns=“http://www.w3.org/1999/xhtml"
xmlns:ui=“http://java.sun.com/jsf/facelets"
xmlns:h=“http://java.sun.com/jsf/html"
xmlns:p=“http://primefaces.org/ui"
xmlns:f=“http://java.sun.com/jsf/core” template=“template.xhtml”>
<ui:define name=“conteudo”>
<h:form>
<p:breadCrumb>
<p:menuitem value=“Lista de Entrada” url=“index.jsf” />
<p:menuitem value=“Lista de Entrada” url=“ListaEntrada.jsf” />
<p:menuitem value=”#{entradaController.legendaForm}” url=“formEntrada.jsf” actionListener=”#{entradaController.clear}” />
<p:menuitem value=“Patrimoniar produtos” url=“formLote.jsf” />
</p:breadCrumb>
</h:form>


<p:messages id=“msg_box” />
<h:form id=“lote” prependId=“false”>
<p:growl id=“messages” showDetail=“true”/>
            <p:dataTable var="objLote" value="#{entradaController.listaLote}" id="loteList" editable="true"
             selection="#{entradaController.selectedLotes}" emptyMessage="Este produto não é tombável!" >  
                
            <p:ajax event="rowEdit" listener="#{entradaController.onEdit}" update=":lote:loteList, :lote:messages"/>  
            <p:ajax event="rowEditCancel" listener="#{entradaController.onCancel}" update=":lote:messages" immediate="true"/>  

            <p:column selectionMode="multiple" style="width: 2%" />
            <p:column headerText="Produto" >
                <h:outputText value="#{objLote.produto.nomeProduto}"/>
            </p:column>
            <p:column headerText="Marca" >
                <h:outputText value="#{objLote.item.marca.nomeMarca}"/>
            </p:column>
            <p:column headerText="Situação" style="width:125px">  
                <p:cellEditor>  
                    <f:facet name="output">  
                        <h:outputText value="#{objLote.situacao.nomeSituacao}" />  
                    </f:facet>  
                    <f:facet name="input">  
                        <h:selectOneMenu value="#{objLote.situacao.idSituacao}" >  
                            <f:selectItems value="#{entradaController.listaSituacao}"  
                                           var="objS"   
                                           itemLabel="#{objS.nomeSituacao}"  
                                           itemValue="#{objS.idSituacao}" />  
                        </h:selectOneMenu>                                  
                    </f:facet>  
                </p:cellEditor>  
            </p:column>
            
            <p:column headerText="Patrimonio" style="width:125px">  
                <p:cellEditor>  
                    <f:facet name="output">  
                        <h:outputText value="#{objLote.numeroPatrimonio}" />  
                    </f:facet>  
                    <f:facet name="input">  
                        <p:inputText value="#{objLote.numeroPatrimonio}" style="width:100%" label="Patrimonio"/>  
                    </f:facet>  
                </p:cellEditor>  
            </p:column>
            
            <p:column headerText="Ações" style="width:50px">  
                <p:rowEditor />  
            </p:column>  
        </p:dataTable>  
            <br/><br/><br/> 
    </h:form>
    </div>
</ui:define>

</ui:composition>[/code]

Meu Bean

[code]package br.com.wgs.controller;

import br.com.wgs.dao.EntradaDAO;
import br.com.wgs.dao.LoteDAO;
import br.com.wgs.dao.MarcaDAO;
import br.com.wgs.dao.ProdutoDAO;
import br.com.wgs.dao.SituacaoDAO;
import br.com.wgs.model.Entrada;
import br.com.wgs.model.Item;
import br.com.wgs.model.Lote;
import br.com.wgs.model.LoteDataModel;
import br.com.wgs.model.Marca;
import br.com.wgs.model.PessoaJuridica;
import br.com.wgs.model.Produto;
import br.com.wgs.model.Situacao;
import br.com.wgs.util.ExceptionDatabase;
import br.com.wgs.util.ExceptionMessage;
import br.com.wgs.validator.EntradaValidator;
import br.com.wgs.validator.ItemValidator;
import br.com.wgs.validator.LoteValidator;
import java.io.Serializable;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import javax.faces.validator.ValidatorException;
import org.primefaces.event.RowEditEvent;
import org.primefaces.model.LazyDataModel;
import org.primefaces.model.SortOrder;

/**
*

  • @author Lesliê Cardoso da Silva
    */
    @ManagedBean
    @SessionScoped
    public class EntradaController implements Serializable {

    private static final long serialVersionUID = 3504095753892633853L;
    private Entrada entrada;
    private LazyDataModel listaEntrada;
    private PessoaJuridica fornecedor;
    private List listaProdutoPesquisa;
    private List listaProduto;
    private List listaMarca;
    private List listaItem;
    private List listaLote;
    private List listaSituacao;
    private List selectedLotes;
    private LoteDataModel mediumLotesModel;
    private Situacao situacao;
    private Integer TRegistrosEntradaItem;
    private Integer botao;
    private String maxDate;
    private String LegendaForm;
    private Item qryItem;
    private Item item;
    private Integer TRegistrosEntrada;
    private Produto qryProduto;
    private Marca qryMarca;
    private Lote lote;

    public List getSelectedLotes() {
    if(selectedLotes == null){
    selectedLotes = new ArrayList<>();
    }
    return selectedLotes;
    }

    public void setSelectedLotes(List selectedLotes) {
    this.selectedLotes = selectedLotes;
    }

    public LoteDataModel getMediumLotesModel() {
    return mediumLotesModel;
    }

    public void setMediumLotesModel(LoteDataModel mediumLotesModel) {
    this.mediumLotesModel = mediumLotesModel;
    }

    public Lote getLote() {
    if(lote == null){
    lote = new Lote();
    }
    return lote;
    }

    public void setLote(Lote lote) {
    this.lote = lote;
    }

    public Produto getQryProduto() {
    if (qryProduto == null) {
    qryProduto = new Produto();
    }
    return qryProduto;
    }

    public void setQryProduto(Produto qryProduto) {
    this.qryProduto = qryProduto;
    }

    public Marca getQryMarca() {
    if (qryMarca == null) {
    qryMarca = new Marca();
    }
    return qryMarca;
    }

    public void setQryMarca(Marca qryMarca) {
    this.qryMarca = qryMarca;
    }

    public Item getQryItem() {
    if(qryItem ==null){
    qryItem = new Item();
    }
    return qryItem;
    }

    public void setQryItem(Item qryItem) {
    this.qryItem = qryItem;
    }

    public Item getItem() {
    if(item ==null){
    item = new Item();
    }
    return item;
    }

    public void setItem(Item item) {
    this.item = item;
    }

    public List getListaLote() {
    if(listaLote == null){
    FacesContext mensagem = FacesContext.getCurrentInstance();
    try
    {
    LoteDAO pEntDAO = new LoteDAO();
    listaLote = pEntDAO.listaPatrimonioLote(getItem());
    }
    catch (ExceptionDatabase e) {
    ExceptionMessage message = new ExceptionMessage(e.getMessage());
    mensagem.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, message.getMessage(), null));
    }
    }
    return listaLote;
    }

    public void setListaLote(List listaLote) {
    this.listaLote = listaLote;
    }

    public List getListaSituacao() {
    if(listaSituacao == null){
    FacesContext mensagem = FacesContext.getCurrentInstance();
    try
    {
    SituacaoDAO DAO = new SituacaoDAO();
    listaSituacao = DAO.listaSituacao();
    }
    catch (ExceptionDatabase e) {
    ExceptionMessage message = new ExceptionMessage(e.getMessage());
    mensagem.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, message.getMessage(), null));
    }
    }
    return listaSituacao;
    }

    public void setListaSituacao(List listaSituacao) {
    this.listaSituacao = listaSituacao;
    }

    public void pesquisarProduto(ActionEvent actionEvent) throws ExceptionDatabase {
    if (getQryProduto().getNomeProduto().length() < 3) {
    setQryProduto(null);
    FacesContext mensagem = FacesContext.getCurrentInstance();
    mensagem.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_WARN, “Por favor digite pelo menos 3 caracteres para efetuar essa pesquisa!”, null));
    //throw new ExceptionDatabase(“teste”);
    } else {
    setListaProduto(null);
    }
    }

    public void pesquisarMarca(ActionEvent actionEvent) throws ExceptionDatabase {
    if (getQryMarca().getNomeMarca().length() < 3) {
    setQryMarca(null);
    FacesContext mensagem = FacesContext.getCurrentInstance();
    mensagem.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_WARN, “Por favor digite pelo menos 3 caracteres para efetuar essa pesquisa!”, null));
    //throw new ExceptionDatabase(“teste”);
    } else {
    setListaMarca(null);
    }
    }

    public List getListaMarca() {
    if (listaMarca == null) {
    FacesContext mensagem = FacesContext.getCurrentInstance();
    try {
    MarcaDAO DAO = new MarcaDAO();
    listaMarca = DAO.listaMarca(getQryMarca());
    } catch (ExceptionDatabase e) {
    ExceptionMessage message = new ExceptionMessage(e.getMessage());
    mensagem.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, message.getMessage(), null));
    }
    }
    return listaMarca;
    }

    public void setListaMarca(List listaMarca) {
    this.listaMarca = listaMarca;
    }

    public List getListaProduto() {
    if (listaProduto == null) {
    FacesContext mensagem = FacesContext.getCurrentInstance();
    try {
    ProdutoDAO DAO = new ProdutoDAO();
    listaProduto = DAO.listaProduto(getQryProduto());
    } catch (ExceptionDatabase e) {
    ExceptionMessage message = new ExceptionMessage(e.getMessage());
    mensagem.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, message.getMessage(), null));
    }
    }
    return listaProduto;
    }

    public void setListaProduto(List listaProduto) {
    this.listaProduto = listaProduto;
    }

    public void adicionarItem(){
    Integer n = new Integer(0);
    FacesContext mensagem = FacesContext.getCurrentInstance();

     try
     {
         getItem().setEntrada(getEntrada());
         ItemValidator Val = new ItemValidator();
         Val.validate(null, null, getItem());
    
         for(Item ite:listaItem){
             if(ite.getProduto().getIdProduto() == getItem().getProduto().getIdProduto() &&
                     ite.getMarca().getIdMarca() == getItem().getMarca().getIdMarca()){
                 n =1;
                 mensagem.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_WARN, "O produto: "+getItem().getProduto().getNomeProduto()+" da marca: "+getItem().getMarca().getNomeMarca()+" já consta inserido nesta entrada!", null));
             }
         }
         if(n == 0) {
             listaItem.add(getItem());
             mensagem.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "O produto: "+getItem().getProduto().getNomeProduto()+" foi adicionado com sucesso!", null));
         }
         setQryItem(null);
         setQryProduto(null);
         setQryMarca(null);
         setItem(null);
     } catch (ValidatorException e) {
         mensagem.getMessageList().iterator();
     }
    

    }

    public void removeItem(){
    FacesContext mensagem = FacesContext.getCurrentInstance();
    for(int i = 0; i < listaItem.size(); i++){
    if(listaItem.get(i).getProduto().getIdProduto()== getItem().getProduto().getIdProduto() &&
    listaItem.get(i).getMarca().getIdMarca() == getItem().getMarca().getIdMarca()){
    listaItem.remove(i);
    mensagem.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, “O produto: “+getItem().getProduto().getNomeProduto()+” foi removido com sucesso!”, null)); }
    }
    setQryItem(null);
    setQryProduto(null);
    setQryMarca(null);
    setItem(null);
    }

    public String getLegendaForm() {
    return LegendaForm;
    }

    public void setLegendaForm(String LegendaForm) {
    this.LegendaForm = LegendaForm;
    }

    public String formEntrada(){
    setLegendaForm(“Cadastrar entrada de produtos”);
    clear();
    return “actFormEntrada”;
    }

    public String getMaxDate() {
    Date data = new Date();
    SimpleDateFormat formatador = new SimpleDateFormat(“dd/MM/yyyy”);
    return formatador.format(data);
    }

    public void pesquisarItem(ActionEvent actionEvent) throws ExceptionDatabase {
    if (getQryItem().getProduto().getNomeProduto().length() < 3) {
    setQryItem(null);
    FacesContext mensagem = FacesContext.getCurrentInstance();
    mensagem.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_WARN, “Por favor digite pelo menos 3 caracteres para efetuar essa pesquisa!”, null));
    //throw new ExceptionDatabase(“teste”);
    } else {
    setListaItem(null);
    }
    }

    public List getListaItem() {
    if (listaItem == null) {
    FacesContext mensagem = FacesContext.getCurrentInstance();
    try {
    EntradaDAO DAO = new EntradaDAO();
    listaItem = DAO.listaItem(getEntrada(), getQryItem());
    } catch (ExceptionDatabase e) {
    mensagem.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, e.getMessage(), null));
    }
    }
    return listaItem;
    }

    public void setListaItem(List listaItem) {
    this.listaItem = listaItem;
    }

    public Integer getTRegistrosEntradaItem() {
    if (TRegistrosEntradaItem == null) {
    try {
    EntradaDAO DAO = new EntradaDAO();
    setTRegistrosEntradaItem(DAO.ListaEntradaItemCount(getEntrada()));
    } catch (ExceptionDatabase e) {
    TRegistrosEntradaItem = new Integer(0);
    }

     }
     return TRegistrosEntradaItem;
    

    }

    public void setTRegistrosEntradaItem(Integer TRegistrosEntradaItem) {
    this.TRegistrosEntradaItem = TRegistrosEntradaItem;
    }

    public void setMaxDate(String maxDate) {
    this.maxDate = maxDate;
    }

    public PessoaJuridica getFornecedor() {
    return fornecedor;
    }

    public void setFornecedor(PessoaJuridica fornecedor) {
    this.fornecedor = fornecedor;
    }

    public void modEdicao() {
    setBotao(1);
    }

    public Integer getBotao() {
    if (botao == null) {
    botao = new Integer(0);
    }
    return botao;
    }

    public void setBotao(Integer botao) {
    this.botao = botao;
    }

    public Entrada getEntrada() {
    if (entrada == null) {
    entrada = new Entrada();
    }
    return entrada;
    }

    public void setEntrada(Entrada entrada) {
    this.entrada = entrada;
    }

    public LazyDataModel getListaEntrada() {
    if (listaEntrada == null) {
    listaEntrada = new LazyDataModel() {
    @Override
    public List load(int first, int pageSize, String string, SortOrder so, Map<String, String> map) {
    FacesContext mensagem = FacesContext.getCurrentInstance();
    try
    {
    EntradaDAO DAO = new EntradaDAO();
    List ps = DAO.listaEntrada(first,pageSize);
    if(ps.isEmpty()){
    mensagem.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_WARN,“Antes de tentar realizar este cadastro verifique se existe o produtos cadastrados sistema”, null));
    }
    return ps;
    }
    catch (ExceptionDatabase e) {
    return null;
    }
    }
    };
    listaEntrada.setPageSize(10);
    listaEntrada.setRowCount(getTRegistrosEntrada());
    }
    return listaEntrada;
    }

    public void setListaEntrada(LazyDataModel listaEntrada) {
    this.listaEntrada = listaEntrada;
    }

    public Integer getTRegistrosEntrada() {
    if(TRegistrosEntrada == null)
    {
    try
    {
    EntradaDAO DAO = new EntradaDAO();
    setTRegistrosEntrada(DAO.ListaEntradaCount());
    }
    catch (ExceptionDatabase e) {
    TRegistrosEntrada = new Integer(0);
    }

     }
     return TRegistrosEntrada;
    

    }

    public void setTRegistrosEntrada(Integer TRegistrosEntrada) {
    this.TRegistrosEntrada = TRegistrosEntrada;
    }

    public void clear() {
    setItem(null);
    setQryItem(null);
    setQryMarca(null);
    setQryProduto(null);
    setEntrada(null);
    setListaItem(null);
    setListaEntrada(null);
    }

    public String formLote() {
    setListaLote(null);
    return “actFormLote”;
    }

    public String formEntradaItem() {
    setListaItem(null);
    return “actFormEntradaItem”;
    }

    public String formEntradaEditar() {
    setLegendaForm(“Editar entrada de produtos”);
    setListaItem(null);
    setQryItem(null);
    setQryMarca(null);
    setQryProduto(null);
    return “actFormEntrada”;
    }

    public void onEdit(RowEditEvent event) {

     FacesContext mensagem = FacesContext.getCurrentInstance();
     setLote((Lote)event.getObject());
     try
     {   
         LoteValidator pEntVal = new LoteValidator();
         pEntVal.validate(null, null, getLote());
         LoteDAO pEntDAO = new LoteDAO();
         pEntDAO.update(getLote());
         setLote(null);
         //setListaLote(null);
         FacesMessage msg = new FacesMessage("Produto alterado com sucesso!", "Número do patrimônio: "+((Lote) event.getObject()).getNumeroPatrimonio());  
         FacesContext.getCurrentInstance().addMessage(null, msg);
     }
     catch (ExceptionDatabase e) {
         getLote().setIdLote(null);
         ExceptionMessage message = new ExceptionMessage(e.getMessage());
         mensagem.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, message.getMessage(), null));
    
     }
     catch (ValidatorException e) {
         mensagem.getMessageList().iterator();
    
     }
    

    }

    public void onCancel(RowEditEvent event) {
    FacesMessage msg = new FacesMessage(“Cancelado a edição do patrimônio!”, ((Lote) event.getObject()).getNumeroPatrimonio());
    FacesContext.getCurrentInstance().addMessage(null, msg);
    }

    public String insert() {
    FacesContext mensagem = FacesContext.getCurrentInstance();
    try {
    getEntrada().setListaItem(getListaItem());
    EntradaValidator pEntVal = new EntradaValidator();
    pEntVal.validate(null, null, getEntrada());

         EntradaDAO pEntDAO = new EntradaDAO();
         pEntDAO.insert(getEntrada(),getListaItem());
         setListaEntrada(null);
         mensagem.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Código da entrada: " + getEntrada().getIdEntrada() + ", foi inserida com sucesso!", null));
         setEntrada(null);
         setTRegistrosEntrada(null);
         return "actListaEntrada";
     } catch (ExceptionDatabase e) {
         getEntrada().setIdEntrada(null);
         mensagem.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, e.getMessage(), null));
         return null;
     } catch (ValidatorException e) {
         mensagem.getMessageList().iterator();
         return null;
     }
    

    }

    public String update() {
    FacesContext mensagem = FacesContext.getCurrentInstance();
    try {
    getEntrada().setListaItem(getListaItem());
    EntradaValidator pEntVal = new EntradaValidator();
    pEntVal.validate(null, null, getEntrada());

         EntradaDAO pEntDAO = new EntradaDAO();
         pEntDAO.update(getEntrada(),getListaItem());
         setListaEntrada(null);
         mensagem.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Entrada: " + getEntrada().getIdEntrada() + ", foi atualizada com sucesso!", null));
         setEntrada(null);
         setTRegistrosEntrada(null);
         setBotao(0);
         return "actListaEntrada";
     } catch (ExceptionDatabase e) {
         getEntrada().setIdEntrada(null);
         mensagem.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, e.getMessage(), null));
         return null;
     } catch (ValidatorException e) {
         mensagem.getMessageList().iterator();
         return null;
     }
    

    }

    public void delete() {
    FacesContext mensagem = FacesContext.getCurrentInstance();
    try {
    EntradaDAO pEntDAO = new EntradaDAO();
    pEntDAO.delete(getEntrada());
    mensagem.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Entrada: " + getEntrada().getIdEntrada() + “, foi excluída com sucesso!”, null));
    setEntrada(null);
    setListaEntrada(null);
    } catch (ExceptionDatabase e) {
    getEntrada().setIdEntrada(null);
    mensagem.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, e.getMessage(), null));
    }
    }

    public String finalizar(){
    FacesContext mensagem = FacesContext.getCurrentInstance();
    try {
    if(getEntrada().getIdEntrada() > 0)
    {
    EntradaDAO pEntDAO = new EntradaDAO();
    pEntDAO.finalizar(getEntrada(), getListaItem());
    mensagem.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Entrada: " + getEntrada().getNumeroNF() + “, foi Finalizada com sucesso!”, null));
    setListaEntrada(null);
    setBotao(0);
    }
    return “actListaEntrada”;
    } catch (ExceptionDatabase e) {
    getEntrada().setIdEntrada(null);
    mensagem.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, e.getMessage(), null));
    return null;
    } catch (ValidatorException e) {
    mensagem.getMessageList().iterator();
    return null;
    }
    }
    }[/code]

Bem consegui fazer ele renderizar mudando o value no datatable para value="#{entradaController.mediumLotesModel}"
e mudando o seguinte método getMediumLotesModel no EntradaController para

public LoteDataModel getMediumLotesModel(){
        if(mediumLotesModel == null){
            FacesContext mensagem = FacesContext.getCurrentInstance();
            try
            {
                LoteDAO pEntDAO = new LoteDAO();
                listaLote = pEntDAO.listaPatrimonioLote(getItem());
                setMediumLotesModel(new LoteDataModel(listaLote));
            }
            catch (ExceptionDatabase e) {
                ExceptionMessage message = new ExceptionMessage(e.getMessage());
                mensagem.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, message.getMessage(), null));
            }
        }
}

Mais agora tenho problema que ao selecionar ele não chama o beans para setar quais os metodos que selecionei.

Primeiramente quero agradecer a Deus por ter me ajudado, e segundo ao google e stackoverflow que devido a muita leitura e testes consegui chegar a solução através da montagem do quebra cabeça e vários testes. Muitas vezes o povo aponta para olhar o showcase do primefaces. Não sei dizer mais as vezes omite como é o caso dessa tag <p:ajax event=“rowSelectCheckbox” />, sendo que quando você faz igual simplesmente não dá certo.

Primeiro para que colocou no datatable a seguinte linha: rowKey="#{objLote.numeroPatrimonio}" que num stackoverflow falou para colocar remove ela.
entre as tags do datatable coloque as seguintes tags:

[code]<p:dataTable var=“objLote” value="#{entradaController.mediumLotesModel}" id=“loteList” editable=“true"
selection=”#{entradaController.selectedLotes}" rowKey="#{objLote.numeroPatrimonio}" emptyMessage=“Este produto não é tombável!” >

<p:ajax event=“rowSelectCheckbox” />
<p:ajax event=“rowUnselectCheckbox” />

</p:dataTable>[/code]

Caso queira pegar o evento de checagem ou não para retorno de alguma mensagem basta adicionar esses dois métodos no bean

[code]public void seleccionaRow(SelectEvent evt) {
Integer n = new Integer(0);
Object o = evt.getSource();
//System.out.println(o);
}

public void unseleccionaRow() {
System.out.println(“desselecciona row”);
}[/code]

Lembrado que dessa maneira a utilização da tag ajax muda para essa maneira:

Infelizmente ao desmarcar não consegui pegar qual o item que ocorreu mais se alguém descobrir compartilhe!

Sei que faz tempo, mas a solução ainda não está 100%

O problema, por incrivel que parece é na declaração da variável que guarda as seleções.

List cars;

O primefaces não trabalha bem como List,

use ao invés de List

Car[] cars;

Aqui funcionou sem problemas.

Abraço