[Resolvido] Duvida Datatable CellEdit?

Quero fazer update de uma célula no registo de uma tabela, mas meu método onCellEdit tanto o atributo novo como antigo tem mesmo valor.

Código:

Classe EventoBean

package mz.co.evento.bean;

import java.util.List;

import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;

import org.primefaces.event.CellEditEvent;
import org.primefaces.event.RowEditEvent;

import mz.co.evento.dao.DAO;
import mz.co.evento.modelo.Categoria;
import mz.co.evento.modelo.Estabelecimento;
import mz.co.evento.modelo.Evento;

@ManagedBean
@ViewScoped
public class EventoBean {

	private Evento evento = new Evento();
	private Integer estabelecimentoId;
	private Integer categoriaId;
	private Evento eventoSelecionado;

	public void gravarCategorias() {
		Categoria categoria = new DAO<Categoria>(Categoria.class).buscaPorId(this.categoriaId);
		System.out.println("Nome da categoria: " + categoria.getNome());
		this.evento.setCategoria(categoria);
	}

	public void gravarEstabelecimento() {
		Estabelecimento estabelecimento = new DAO<Estabelecimento>(Estabelecimento.class)
				.buscaPorId(this.estabelecimentoId);
		System.out.println(estabelecimento.getNomeEstabelecimento() + " Vamos ver se o estabelecimento esta correcta");
		this.evento.setEstabelecimento(estabelecimento);
	}

	public Evento getEventoSelecionado() {
		return eventoSelecionado;
	}

	public void setEventoSelecionado(Evento eventoSelecionado) {
		this.eventoSelecionado = eventoSelecionado;
	}

	public List<Estabelecimento> getListaEstabelecimentos() {
		return new DAO<Estabelecimento>(Estabelecimento.class).listaTodos();
	}

	public List<Categoria> getListaCategorias() {
		return new DAO<Categoria>(Categoria.class).listaTodos();
	}

	public List<Evento> getListaEventos() {
		return new DAO<Evento>(Evento.class).listaTodos();
	}

	public Evento getEvento() {
		return evento;
	}

	public void setEvento(Evento evento) {
		this.evento = evento;
	}

	public Integer getEventoId() {
		return estabelecimentoId;
	}

	public void setEventoId(Integer eventoId) {
		this.estabelecimentoId = eventoId;
	}

	public Integer getEstabelecimentoId() {
		return estabelecimentoId;
	}

	public void setEstabelecimentoId(Integer estabelecimentoId) {
		this.estabelecimentoId = estabelecimentoId;
	}

	public Integer getCategoriaId() {
		return categoriaId;
	}

	public void setCategoriaId(Integer categoriaId) {
		this.categoriaId = categoriaId;
	}

	public void gravar() {
		System.out.println("Gravando evento " + this.evento.getNomeEvento());
		gravarCategorias();
		gravarEstabelecimento();
		new DAO<Evento>(Evento.class).adiciona(this.evento);
		this.evento = new Evento();
	}

	public void remover() {
		System.out.println("Tentando remover");
		new DAO<Evento>(Evento.class).remove(this.eventoSelecionado);
		this.evento = new Evento();
	}

	public void pesquisar() {

	}

	public void onRowEdit(RowEditEvent event) {
		FacesMessage msg = new FacesMessage("Evento Edited", ((Evento) event.getObject()).getId() + "");
		FacesContext.getCurrentInstance().addMessage(null, msg);
	}

	public void onRowCancel(RowEditEvent event) {
		FacesMessage msg = new FacesMessage("Edit Cancelled", ((Evento) event.getObject()).getId() + "");
		FacesContext.getCurrentInstance().addMessage(null, msg);
	}

	public void onCellEdit(CellEditEvent event) {
		Object oldValue = event.getOldValue();
		Object newValue = event.getNewValue();

		if (newValue != null && !newValue.equals(oldValue)) {
			FacesMessage msg = new FacesMessage(FacesMessage.SEVERITY_INFO, "Cell Changed",
					"Old: " + oldValue + ", New:" + newValue);
			FacesContext.getCurrentInstance().addMessage(null, msg);
		}

		FacesMessage msg = new FacesMessage(FacesMessage.SEVERITY_INFO, "Cell Changed",
				"Old: " + oldValue + ", New:" + newValue);
		FacesContext.getCurrentInstance().addMessage(null, msg);
	}
}

Classe Evento

package mz.co.evento.modelo;

import java.util.Calendar;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.ManyToOne;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

@Entity
public class Evento {
	@Id
	@GeneratedValue
	private Integer id;

	private String nomeEvento;
	private String descricaoEvento;
	private Integer limiteDePessoas;
	private boolean estadoDoEvento;

	@Temporal(TemporalType.DATE)
	private Calendar dataEventoInicio = Calendar.getInstance();

	@Temporal(TemporalType.DATE)
	private Calendar dataEventoFim = Calendar.getInstance();

	@ManyToOne
	private Categoria categoria;

	@ManyToOne
	private Estabelecimento estabelecimento;
	
	// Getters e Setters

	public String getNomeEvento() {
		return nomeEvento;
	}

	public Estabelecimento getEstabelecimento() {
		return estabelecimento;
	}


	public void setEstabelecimento(Estabelecimento estabelecimento) {
		this.estabelecimento = estabelecimento;
	}


	public void setNomeEvento(String nomeEvento) {
		this.nomeEvento = nomeEvento;
	}

	public String getDescricaoEvento() {
		return descricaoEvento;
	}

	public void setDescricaoEvento(String descricaoEvento) {
		this.descricaoEvento = descricaoEvento;
	}

	public Categoria getCategoria() {
		return categoria;
	}

	public void setCategoria(Categoria categoria) {
		this.categoria = categoria;
	}

	public Integer getLimiteDePessoas() {
		return limiteDePessoas;
	}

	public void setLimiteDePessoas(Integer limiteDePessoas) {
		this.limiteDePessoas = limiteDePessoas;
	}

	public Calendar getDataEventoInicio() {
		return dataEventoInicio;
	}

	public void setDataEventoInicio(Calendar dataEventoInicio) {
		this.dataEventoInicio = dataEventoInicio;
	}

	public Integer getId() {
		return id;
	}

	public Calendar getDataEventoFim() {
		return dataEventoFim;
	}

	public void setDataEventoFim(Calendar dataEventoFim) {
		this.dataEventoFim = dataEventoFim;
	}

	public boolean isEstadoDoEvento() {
		return estadoDoEvento;
	}

	public void setEstadoDoEvento(boolean estadoDoEvento) {
		this.estadoDoEvento = estadoDoEvento;
	}

	
	

}

View actualizarevento

    <?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
	xmlns:h="http://java.sun.com/jsf/html"
	xmlns:f="http://java.sun.com/jsf/core"
	xmlns:ui="http://java.sun.com/jsf/facelets"
	xmlns:p="http://primefaces.org/ui"
	 xmlns:fn="http://java.sun.com/jsp/jstl/functions">
	
<ui:composition template="_template.xhtml">
	<ui:define name="titulo">
		Actualizar Eventos
	</ui:define>
	
	<ui:define name="conteudo">
	<h:form id="formulario">
	  <p:growl id="msgs" showDetail="true"/>
		    
   <p:dataTable id="tabelaeventoss" var="evento" value="#{eventoBean.listaEventos}" editable="true" editMode="cell" widgetVar="cellEventos">
       <f:facet name="header">
           Cell Editing with Click and RightClick
       </f:facet>
 
       <p:ajax event="cellEdit" listener="#{eventoBean.onCellEdit}" update=":formulario:msgs" />
 
       	   <p:column headerText="Nome">
              <p:cellEditor>
                  <f:facet name="output"><h:outputText value="#{evento.nomeEvento}" /></f:facet>
                  <f:facet name="input">
                  	<p:inputText id="modelInput" value="#{evento.nomeEvento}" style="width:96%">
                  		<p:ajax event="change" update="modelInput"/>
                  	</p:inputText>
                  </f:facet>
              </p:cellEditor>
          </p:column>
 
  	   	  <p:column headerText="Descricao">
              <p:cellEditor>
                  <f:facet name="output"><h:outputText value="#{evento.descricaoEvento}" /></f:facet>
                  <f:facet name="input"><p:inputText  value="#{evento.descricaoEvento}" style="width:96%"/></f:facet>
              </p:cellEditor>
          </p:column>
 
          <p:column headerText="Data Inicio">
           <p:cellEditor>
               <f:facet name="output">
               	<h:outputText value="#{evento.dataEventoInicio.time}">
               		<f:convertDateTime pattern="dd/MM/yyy" timeZone="Africa/Harare"/>
               	</h:outputText>
               	</f:facet>
               <f:facet name="input">
               	<p:inputText value="#{evento.dataEventoInicio.time}" style="width:96%" label="Year">
               		<f:convertDateTime pattern="dd/MM/yyy" timeZone="Africa/Harare"/>
               </p:inputText>
               </f:facet>
           </p:cellEditor>
       </p:column>
       
        <p:column headerText="Data Fim">
           <p:cellEditor>
               <f:facet name="output">
               	<h:outputText value="#{evento.dataEventoFim.time}">
               		<f:convertDateTime pattern="dd/MM/yyy" timeZone="Africa/Harare"/>
               	</h:outputText>
               	</f:facet>
               <f:facet name="input">
               	<p:inputText value="#{evento.dataEventoFim.time}" style="width:96%" label="Year">
               		<f:convertDateTime pattern="dd/MM/yyy" timeZone="Africa/Harare"/>
               </p:inputText>
               </f:facet>
           </p:cellEditor>
       </p:column>
     </p:dataTable>

 	<p:contextMenu for="tabelaeventoss" widgetVar="cMenu">   
       <p:menuitem value="Edit Cell" icon="ui-icon-search" update ="tabelaeventoss" onclick="PF('cellEventos').showCellEditor();return false;"/>  
       <p:menuitem value="Hide Menu" icon="ui-icon-close" onclick="PF('cMenu').hide()"/>  
   </p:contextMenu> 
   	
	</h:form>
	</ui:define>
</ui:composition>
	
</html>

Obrigado

RESOLVIDO

O problema estava nesta linha:

 <p:ajax event="cellEdit" listener="#{eventoBean.onCellEdit}" update=":formulario:msgs" />

mudei para:

 <p:ajax event="cellEdit" listener="#{eventoBean.onCellEdit}" update=":formulario:tabelaeventoss" />

Obrigado.