exclusão de um objeto do banco com jpa 2 e jsf 2

Bom estou tentando fazer uma exclusão utilizando jpa com jsf mas não estou tendo sucesso. tenho minha tabela.


<p:dataTable value="#{mbProduto.produtos}"
            var="produtos"
            paginator="true"
            rows="10"
            paginatorTemplate="{CurrentPageReport}
            {FirstPageLink}
            {PreviousPageLink} {PageLinks}
            {NextPageLink} {LastPageLink}
            {RowsPerPageDropdown}"
            rowsPerPageTemplate="5,10,15"
            style="width: 80%"
            lazy="true">                
            <p:column>
                    <f:facet name="header">
                        Identificador
                    </f:facet>
                    #{produtos.idProduto}
            </p:column>

            <p:column>
                    <f:facet name="header">
                        Nome
                    </f:facet>
                    #{produtos.nomeProduto}
            </p:column>

            <p:column>
                    <f:facet name="header">
                        Especificações
                    </f:facet>
                    #{produtos.especificacaoProduto}
            </p:column>

            <p:column>
                    <f:facet name="header">
                        Medida Horizontal
                    </f:facet>
                    #{produtos.medidaX}
            </p:column>

            <p:column>
                    <f:facet name="header">
                        Medida Vertical
                    </f:facet>
                    #{produtos.medidaY}
            </p:column>

            <p:column>
                    <f:facet name="header">
                        Preço de Venda
                    </f:facet>
                    #{produtos.precoDeMetroVenda}
            </p:column>

            <p:column>
                    <f:facet name="header">
                        <h:outputText value="Ações" />
                    </f:facet>
                    <h:commandButton value="excluir"
                            action="#{mbProduto.excluir}"
                        id="produtos" ajax="false" onclick="if(!confirm('Deseja excluir #{produtos.nomeProduto}  ?')) return false" />
            </p:column>

            </p:dataTable>

tenho minha Bean


public String excluir() {
    produtoDao.excluir(produto);
    return "pgproduto";
}

está como requestScoped

e finalmente minha DAO


/*** excluir um produto */
public void excluir(Produto produto) {
    EntityManager em = JPAUtil.getEntityManager();
    em.getTransaction().begin();
    em.remove(produto);
    em.getTransaction().commit();
    em.close();     
}

algum help… :frowning:

Da algum erro? Exception? Cola aqui.

O erro que está acontecendo é este.
java.lang.IllegalArgumentException: br.com.drem.entity.Produto cannot be cast to java.io.Serializable

javax.faces.el.EvaluationException: java.lang.IllegalArgumentException: br.com.drem.entity.Produto cannot be cast to 

java.io.Serializable
	at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:101)
	at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102)
	at javax.faces.component.UICommand.broadcast(UICommand.java:315)
	at javax.faces.component.UIData.broadcast(UIData.java:1108)
	at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:790)
	at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1282)
	at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81)
	at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
	at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:198)
	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:646)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
	at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1040)
	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607)
	at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:315)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
	at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.IllegalArgumentException: br.com.drem.entity.Produto cannot be cast to java.io.Serializable
	at org.hibernate.ejb.AbstractEntityManagerImpl.find(AbstractEntityManagerImpl.java:835)
	at org.hibernate.ejb.AbstractEntityManagerImpl.find(AbstractEntityManagerImpl.java:781)
	at br.com.drem.managebean.MbProduto.excluir(MbProduto.java:67)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:483)
	at org.apache.el.parser.AstValue.invoke(AstValue.java:277)
	at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:273)
	at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105)
	at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:87)
	... 28 more
Caused by: java.lang.ClassCastException: br.com.drem.entity.Produto cannot be cast to java.io.Serializable
	at org.hibernate.ejb.AbstractEntityManagerImpl.find(AbstractEntityManagerImpl.java:807)
	... 38 more

se quiser dar uma olhada na aplicação
https://github.com/AndreMart/comunicaVisual

Bro,

tenta settar o produto q vc ta excluindo dentro da tag do commandButton, tipo:

  
&lt;p:column&gt;    
     &lt;f:facet name="header"&gt;    
             &lt;h:outputText value="Ações" /&gt;    
     &lt;/f:facet&gt;    
  
     &lt;p:commandButton value="excluir" action="#{mbProduto.excluir}"    
                       id="produtos" ajax="false" onclick="if(!confirm('Deseja excluir #{produtos.nomeProduto}  ?')) return false" /&gt;   
            &lt;f:setPropertyActionListener value="#{produtos}" target="#{mbProduto.produto}" /&gt;  
      &lt;/p:commandButton&gt;  
&lt;/p:column&gt; 

[quote]javax.faces.el.EvaluationException: java.lang.IllegalArgumentException: br.com.drem.entity.Produto cannot be cast to

java.io.Serializable [/quote]

Já resolveu esse problema ai? Pode ser isso.

A solução do ThalitaPinheiro foi correta parece que o objeto não conseguia chegar a tempo de ser gerenciado, felizmente com essa propriedade <f:setPropertyActionListener value="#{produtos}" target="#{mbProduto.produto}"/> deu certo.