JSF + Hibernate erro ao editar - merge

6 respostas
alandiniz

Olá, estou tendo o seguinte erro:

javax.faces.el.EvaluationException: java.lang.IllegalArgumentException: attempt to create merge event with null entity
	at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:102)
	at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102)
	at javax.faces.component.UICommand.broadcast(UICommand.java:315)

alguem sabe oq eu to fazendo errado? pelo q vi nao to passando um objeto, "departamento"...

1- eu tenho meu managed bean:

@ManagedBean
public class DepartamentoBean {

    Departamento departamento;
    DaoGenerico dao;
    List<Departamento> departamentos;

    public DepartamentoBean() {
        dao = new DaoGenerico();
        departamento = new Departamento();
        departamentos = new ArrayList<>();
        departamentos = (List<Departamento>) dao.recuperaLista(Departamento.class);
    }

    public void editar() {
        dao.salvar(departamento);
    }

    public void cadastro() {
        dao.salvarNovo(departamento);
    }
2- meu método salvar:
public void salvar(Object obj) {
        em.getTransaction().begin();
        em.merge(obj);
        em.getTransaction().commit();
    }
3- meu xhtml:
<div style="padding:10px;">
                <div>
                    Nome do departamento<span style="color: #F00;">*</span><br />
                    <h:inputText value="#{departamentoBean.departamento.nome}" style="width:380px;"/>
                </div>
                <div class="clear"></div>
             
                <div class="clear" style="padding-top:10px; margin-bottom:10px; border-bottom:1px solid #ccc;"></div>
                <div>
                    <h:commandButton value="Salvar" action="#{departamentoBean.editar}">
                        <f:setPropertyActionListener value="#{departamento}" target="#{departamentoBean.departamento}" />  
                    </h:commandButton>
                </div>
            </div>

6 Respostas

drsmachado

E a entity???

alandiniz

Ela eh padraozao, gerado pelo NetBeans com engenharia reversa…

luxu

quem salva naum é o persist? o merge num é alterar?

alandiniz

a intenção eh alterar mesmo… merge

o merge quando nao passo um objeto que já existe, ele grava um novo…
o merge faiz o trabalho dele mesmo e do persist

alandiniz

ngm ? :frowning:

alandiniz

o bean tem que ser o qual scoped?
SessionScoped
RequestScoped…

Criado 14 de outubro de 2011
Ultima resposta 17 de out. de 2011
Respostas 6
Participantes 3