PROBLEMA COM O f:setPropertyActionListener

5 respostas
G

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
/*
 * 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<Actor> listaNomeAtores_action(){
        return sakilaB.listaNomeAtor();
    }
    
    public String excluirAtor_action(){
        System.out.println("É null? " + (atorSelecionado == null ? "sim" : "nao"));
        sakilaB.excluirAtor(atorSelecionado);
        
        return "";
    }

5 Respostas

A

cara,

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

T+

G

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 ?

A

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+

W

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

G

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:

Criado 19 de janeiro de 2012
Ultima resposta 23 de jan. de 2012
Respostas 5
Participantes 3