[ RESOLVIDO ] Erro ao alterar dados utilizando JSF 2.0

2 respostas
A

Boa tarde, to com um problema aqui ao atualizar os dados utilizando JSF 2.0
tenho uma tabela de dados com os campos listados do banco de dados, a penultima coluna da da tabela é um imagem que após clicar ela redireciona a linha o usuario para uma outra página para ser alterado, após preencher os campos a serem alterados me deparo com um erro onde não estou conseguindo encontrar a solução, irei postar os códigos fontes referentes a essa programação..

ERRO
01/04/2012 17:49:02 com.sun.faces.lifecycle.InvokeApplicationPhase execute
WARNING: #{usuarioBean.editar}: org.hibernate.HibernateException: immutable natural identifier of an instance of br.com.anderson.usuario.Usuario was altered
javax.faces.FacesException: #{usuarioBean.editar}: org.hibernate.HibernateException: immutable natural identifier of an instance of br.com.anderson.usuario.Usuario was altered
	at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:118)
	at javax.faces.component.UICommand.broadcast(UICommand.java:315)
	at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:794)
	at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1259)
	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:118)
	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:409)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
	at java.lang.Thread.run(Unknown Source)
Caused by: javax.faces.el.EvaluationException: org.hibernate.HibernateException: immutable natural identifier of an instance of br.com.anderson.usuario.Usuario was altered
	at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:102)
	at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102)
	... 19 more
Caused by: org.hibernate.HibernateException: immutable natural identifier of an instance of br.com.anderson.usuario.Usuario was altered
	at org.hibernate.event.def.DefaultFlushEntityEventListener.checkNaturalId(DefaultFlushEntityEventListener.java:117)
	at org.hibernate.event.def.DefaultFlushEntityEventListener.getValues(DefaultFlushEntityEventListener.java:192)
	at org.hibernate.event.def.DefaultFlushEntityEventListener.onFlushEntity(DefaultFlushEntityEventListener.java:143)
	at org.hibernate.event.def.AbstractFlushingEventListener.flushEntities(AbstractFlushingEventListener.java:219)
	at org.hibernate.event.def.AbstractFlushingEventListener.flushEverythingToExecutions(AbstractFlushingEventListener.java:99)
	at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:49)
	at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1027)
	at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:365)
	at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:137)
	at br.com.anderson.usuario.UsuarioDAOHibernate.alterar(UsuarioDAOHibernate.java:36)
	at br.com.anderson.usuario.UsuarioRN.alterar(UsuarioRN.java:28)
	at br.com.anderson.bean.UsuarioBean.editar(UsuarioBean.java:65)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.lang.reflect.Method.invoke(Unknown Source)
	at org.apache.el.parser.AstValue.invoke(AstValue.java:152)
	at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:276)
	at org.apache.jasper.el.JspMethodExpression.invoke(JspMethodExpression.java:68)
	at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:88)
	... 20 more
01/04/2012 17:49:02 org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet Faces Servlet threw exception
org.hibernate.HibernateException: immutable natural identifier of an instance of br.com.anderson.usuario.Usuario was altered
	at org.hibernate.event.def.DefaultFlushEntityEventListener.checkNaturalId(DefaultFlushEntityEventListener.java:117)
	at org.hibernate.event.def.DefaultFlushEntityEventListener.getValues(DefaultFlushEntityEventListener.java:192)
	at org.hibernate.event.def.DefaultFlushEntityEventListener.onFlushEntity(DefaultFlushEntityEventListener.java:143)
	at org.hibernate.event.def.AbstractFlushingEventListener.flushEntities(AbstractFlushingEventListener.java:219)
	at org.hibernate.event.def.AbstractFlushingEventListener.flushEverythingToExecutions(AbstractFlushingEventListener.java:99)
	at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:49)
	at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1027)
	at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:365)
	at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:137)
	at br.com.anderson.usuario.UsuarioDAOHibernate.alterar(UsuarioDAOHibernate.java:36)
	at br.com.anderson.usuario.UsuarioRN.alterar(UsuarioRN.java:28)
	at br.com.anderson.bean.UsuarioBean.editar(UsuarioBean.java:65)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.lang.reflect.Method.invoke(Unknown Source)
	at org.apache.el.parser.AstValue.invoke(AstValue.java:152)
	at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:276)
	at org.apache.jasper.el.JspMethodExpression.invoke(JspMethodExpression.java:68)
	at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:88)
	at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102)
	at javax.faces.component.UICommand.broadcast(UICommand.java:315)
	at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:794)
	at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1259)
	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:118)
	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:409)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
	at java.lang.Thread.run(Unknown Source)
MÉTODO DAO DE ALTERAR
@Override
	public void alterar(Usuario user) {
		Transaction tx = session.beginTransaction();
		this.session.update(user);
		tx.commit();
 	    this.session.close();
             
	}
METODO DA CLASSE UsuarioRN
public void alterar(Usuario usuario){
    	this.usuarioDAO.alterar(usuario);
    }
MÉTODO BEAN
public String editar(){
		FacesContext context = FacesContext.getCurrentInstance();
		String senha = usuario.getSenha();
		
		if(!senha.equals(confirmaSenha)){
			FacesMessage mensagem = new FacesMessage("Confirmação de Senha Incorreta");
			context.addMessage(null, mensagem);
			return null;
		}else{
			UsuarioRN usuarioRN = new UsuarioRN();
			usuarioRN.alterar(usuario);
			return "listagem";
		    }
	}
PAGINA DE LISTAGEM DE DADOS QUE CONTEM O LINK PARA REDIRECIONAMENTO PARA A PAGINA DE ALTERAÇÃO
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>

<%@ taglib prefix="f"  uri="http://java.sun.com/jsf/core"%>
<%@ taglib prefix="h"  uri="http://java.sun.com/jsf/html"%>

<html>
  <head>
    <title>Lista de Usuários</title>
  </head>
  <body>
    <f:view>
        <h:form>
        
          <h:messages/>  
           
          <h:dataTable value="#{usuarioBean.lista}" var="usuario" rules="rows" cellpadding="7">
                        
             <f:facet name="header">
                <h:outputText value="Listagem de Usuários" />
             </f:facet>
             <f:facet name="footer">
                 <h:outputText value="Final da Listagem"/>
             </f:facet>
               
               <h:column>
                  <f:facet name="header">
                   <h:outputText value="Identificação"/>
                  </f:facet>
                  <h:outputText value="#{usuario.idusuario}"/>
               </h:column>
               
               <h:column>
                  <f:facet name="header">
                     <h:outputText value="Status"/>
                  </f:facet>
                  <h:commandLink action="#{usuarioBean.active}">
                    <h:graphicImage value="/imagem/#{usuario.status}.png"/>
                    <f:setPropertyActionListener value="#{usuario}" target="#{usuarioBean.usuario}"/>
                  </h:commandLink>
               </h:column>
               
               <h:column>
                   <f:facet name="header">
                     <h:outputText value="Idioma"/>
                  </f:facet>
                  <!--<h:graphicImage value="/imagem/#{usuario.idioma}.png"/>-->
                  <h:outputText value="#{usuario.idioma}"/>
               </h:column>
               
               <h:column>
                  <f:facet name="header">
                     <h:outputText value="Nome"/>
                  </f:facet>
                  <h:outputText value="#{usuario.nome}"/>
               </h:column>
               
               <h:column>
                  <f:facet name="header">
                     <h:outputText value="Email"/>
                  </f:facet>
                  <h:outputText value="#{usuario.email}"/>
               </h:column>
               
               <h:column>
                  <f:facet name="header">
                     <h:outputText value="Editar"/>
                  </f:facet>
                  <h:commandLink action="editar.jsp">
                     <h:graphicImage value="/imagem/Alterar.png"/>
                     <f:setPropertyActionListener value="#{usuario}" target="#{usuarioBean.usuario}"/>
                  </h:commandLink>
               </h:column>
                  
               <h:column>
                  <f:facet name="header">
                      <h:outputText value="Deletar"/>
                 </f:facet>
                  <h:commandLink action="#{usuarioBean.deletar}">
                     <h:graphicImage value="/imagem/Deletar.png"/>
                     <f:setPropertyActionListener value="#{usuario}" target="#{usuarioBean.usuario}"/>
                  </h:commandLink>
               </h:column>
          </h:dataTable>
        
        </h:form>
    </f:view>
  </body>
</html>
PAGINA DE ALTERAÇÃO
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>
<%@ taglib prefix="f"  uri="http://java.sun.com/jsf/core"%>
<%@ taglib prefix="h"  uri="http://java.sun.com/jsf/html"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>

  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
    <title>Alterar Usuario</title>
  </head> 
   <body>
     <f:view>
          <h1>Alteração de Usuario </h1>
          
          <h:form id="cadastro">
            <h:messages/>
             <h:inputHidden value="#{usuarioBean.usuario.idusuario}"/>
          
             <h:panelGrid columns="2">
                <h:outputText value="Nome: "/>
                <h:inputText value="#{usuarioBean.usuario.nome}" required ="true"  requiredMessage="Por Favor digite seu Nome"
                                           validatorMessage="O nome deve conter no mínimo 7 e no maximo 45 caracters">
                    <f:validateLength minimum="7" maximum="45"/>
                 </h:inputText>
                
                   <h:outputText value="Email: "/>
                   <h:inputText value="#{usuarioBean.usuario.email}" required ="true"  requiredMessage="Digite seu Email"
                                     validatorMessage="Email inválido!" >
                   <f:validateRegex pattern="[a-zA-Z0-9\-\_\.]+@[a-zA-Z0-9\-\_\.]+"/></h:inputText>
              
                <h:outputText value="Idioma: "/>
                <h:selectOneMenu value="#{usuarioBean.usuario.idioma}">
                     <f:selectItem itemValue="Português"/>
                     <f:selectItem itemValue="Espanhol"/>
                     <f:selectItem itemValue="Inglês"/>
                </h:selectOneMenu>
                
                <h:outputText value="Status: "/>
                <h:selectOneMenu value="#{usuarioBean.usuario.status}">
                     <f:selectItem itemValue="Ativo"/>
                     <f:selectItem itemValue="Inativo"/> 
                </h:selectOneMenu>
                 
               <h:outputText value="Senha: "/>
               <h:inputSecret value="#{usuarioBean.usuario.senha}" required="true" 
               requiredMessage="Campo Senha Obrigatório" redisplay="true"/>
               
               <h:outputText value="Confirma Senha: "/>
                <h:inputSecret value="#{usuarioBean.confirmaSenha}" redisplay="true"/>  
             </h:panelGrid>
              
             <h:commandButton action="#{usuarioBean.editar}"
                              value="Editar"/> 
          </h:form>
     </f:view>
   </body>
   
</html>

2 Respostas

A

Ta complição encontrar a solução pessoal… :shock:

A

Ai pessoal, acho que aparentemente encontrei o erro, na classe Usuario onde faço o mapeamento dos campos, eu tava mapeando o email como campo Imutavel, descobrir isso por que tentei alterar apenas um campo e deu certo, fiz isso com todos e deu certo, mais com o email não dava certo!!!
:slight_smile:

Criado 1 de abril de 2012
Ultima resposta 2 de abr. de 2012
Respostas 2
Participantes 1