PROBLEMA COM O f:setPropertyActionListener

Fala galera buenas?

Então… estou com o seguinte problema o f:setPropertyActionListener não esta passando o OBJETO :@ o que eu quero é simplesmente passar um objeto e excluir a bendita linha da tabela.

ERRO: java.lang.IllegalArgumentException: Object: null is not a known entity type.

QUEM SERÁ MEU HEROI?

MEU XHTML

<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:f="http://java.sun.com/jsf/core" xmlns:p="http://primefaces.org/ui" template="/template.xhtml"> <ui:define name="contents"> <h:form> <p:panel id="listaAtor"> <p:dataTable value="#{sakilaMB.listaNomeAtores_action()}" var="ator" paginator="true" rows="10"> <f:facet name="header"> Paginas </f:facet> <p:column headerText="ID" sortBy="#{sakilaMB.idAtor}" filterBy="#{sakilaMB.idAtor}"> <f:facet name="header"> ID </f:facet> <h:outputText value="#{ator.actorId}" /> </p:column> <p:column headerText="Nome" sortBy="#{sakilaMB.nome}" filterBy="#{sakilaMB.nome}"> <f:facet name="header"> Nome </f:facet> <h:outputText value="#{ator.firstName} " /> </p:column> <p:column headerText="Nome" sortBy="#{sakilaMB.sobreNome}" filterBy="#{sakilaMB.sobreNome}"> <f:facet name="header"> Sobrenome </f:facet> <h:outputText value="#{ator.lastName} " /> </p:column> <p:column headerText="Ultima Atuação" sortBy="#{sakilaMB.dataAtual}" filterBy="#{sakilaMB.dataAtual}"> <f:facet name="header"> Ultima Atuação </f:facet> <h:outputText value="#{ator.lastUpdate} " /> </p:column> <p:column headerText="Excluir"> <p:commandLink value="Excluir" onclick="confirmation.show()"> <f:setPropertyActionListener target="#{sakilaMB.atorSelecionado}" value="#{ator}" /> </p:commandLink> </p:column> </p:dataTable> </p:panel> <p:confirmDialog message="Deseja realmente excluir?" header="Excluir" severity="alert" widgetVar="confirmation"> <p:commandButton value="Sim" update="listaAtor" oncomplete="confirmation.hide()" actionListener="#{sakilaMB.excluirAtor_action()}" ajax="false" /> <p:commandButton value="Não" onclick="confirmation.hide()" type="button" /> </p:confirmDialog> </h:form> </ui:define> </ui:composition>

MEU BEAN

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

import br.com.empresa.entidade.Actor;
import java.util.List;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;

/**
 *
 * @author suporte
 */
@Stateless
public class SakilaBean implements SakilaBeanLocal {

    @PersistenceContext(unitName = "TesteLeandroPU")
    private EntityManager em;

    @Override
    public void persist(Object object) {
        em.persist(object);
    }

    @Override
    public void AdicionaAtor(Actor ator) {
        em.persist(ator);
    }

    @Override
    public List<Actor> listaNomeAtor() {
        Query q = em.createNamedQuery("Actor.findAll");
        List<Actor> atores = q.getResultList();
        if (atores.isEmpty()) {
            return null;
        } else {
            return atores;
        }
    }
    
    @Override
    public void excluirAtor(Actor ator){
        em.remove(ator);
        em.flush();
    }
    // Add business logic below. (Right-click in editor and choose
    // "Insert Code > Add Business Method")
}

MEU MB

[code]
/*

  • To change this template, choose Tools | Templates
  • and open the template in the editor.
    */
    package br.com.empresa;

import br.com.empresa.entidade.Actor;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import sun.java2d.pipe.SpanShapeRenderer;

/**
*

  • @author suporte
    */
    @ManagedBean
    @RequestScoped
    public class SakilaMB {
    @EJB
    private SakilaBeanLocal sakilaB;

    /**

    • Creates a new instance of SakilaMB
      */
      private String nome;
      private String sobreNome;
      private Date dataAtual = Calendar.getInstance().getTime();
      private Actor ator;
      private Actor idAtor;
      private Actor atorSelecionado;

    public SakilaMB() {
    }

    public String adicionaAtor(){
    Actor a = new Actor();
    a.setFirstName(nome);
    a.setLastName(sobreNome);
    a.setLastUpdate(getDataAtual());
    sakilaB.AdicionaAtor(a);
    nome = sobreNome = “”;
    return “”;
    }

    public List listaNomeAtores_action(){
    return sakilaB.listaNomeAtor();
    }

    public String excluirAtor_action(){
    System.out.println("É null? " + (atorSelecionado == null ? “sim” : “nao”));
    sakilaB.excluirAtor(atorSelecionado);

     return "";
    

    }[/code]

cara,

tenta essas duas coisas,
vc fez o get e set do da variavel atorSelecionado, se sim
tenta passar de requestScoped para sessionScoped

T+

Velho eu tenho os gettes e settes só não coloquei aqui :slight_smile:

Em relação a colocar a annotation meu projeto nem abre com ela :S

tem outra idéia ?

cara,

entao vc tem que ver o que está acontencendo no seu projeto pq era para funcionar o @SessionScoped.
Eu tenho essa situação em um projeto e funciona perfeito.

t+

seu problema é isso: @RequestScoped , como disseram @SessionScoped resolve, mas antes de chutar o pau da barraca, acredito que @ViewScoped resolve também seu problema sem ter que apelar pro @SessionScoped.

edit: se não abre é porquê você não fez o import da classe necessária, não esqueça do seu devido import:

import javax.faces.bean.ViewScoped;
import javax.faces.bean.SessionScoped;

se você tiver usando eclipse, vai no ManagedBean e aperta ctrl + shift + o que ele resolve os import automaticamente.

[]'s

Galera valeu era isso mesmo, conseguimos resolver aqui, estava dando erro por que ele estava tentando recriar as tabelas. Dai fui na minha persistência e marquei a opção para ele não tentar criar e GG :slight_smile: