Converter para SelectOneMenu

o Problema e o seguinte: tenho um relacionamento 1:n de perfil para usuario, entao no cadastro de usuario eu tenho um
selectOneMenu com os perfis disponiveis,na hora de salva eu preciso de um objeto perfil e nao do codigoPerfil como eu montei meu selectOne entao como posso fazer isso?To tentando assim:

package com.NASeguranca.Util;

import java.util.Map;

import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;

import com.NASeguranca.Model.PerfilUsuario;

public class PerfilUsuarioConverter 
	 implements Converter {

	    public Object getAsObject(FacesContext contexto, UIComponent componente, String valor) {
	        if (valor != null) {
	            return getAttributes(componente).get(valor);
	        }

	        return null;
	    }

	    public String getAsString(FacesContext contexto, UIComponent componente, Object valor) {
	        if (valor != null) {
	        	 PerfilUsuario professor = ( PerfilUsuario) valor;

	            getAttributes(componente).put(professor.getDescricao(), professor);

	            return professor.getDescricao();      
	        }

	        return null;
	    }

	    private Map<String,Object> getAttributes(UIComponent componente) {
	        return componente.getAttributes();
	    }

	} 

to populando assim:[code]

public  List<SelectItem> getLista() throws Exception {          
    List<SelectItem> lista = new LinkedList<SelectItem>();                   
    PerfilUsuario perfil = new PerfilUsuario();    
     IDaoPerfilUsuario idao = new DaoPerfilUsuario();    
     
     List<PerfilUsuario> resultado = (List<PerfilUsuario>) idao.ListarTudo();            
      for(PerfilUsuario teste : resultado){            
                 
        SelectItem item = new SelectItem(teste.getCodigoperfil(), teste.getDescricao());      
        lista.add(item);          
             
     }          
   return lista;          

}

[/code]
ta registrado:[code]

com.NASeguranca.Model.PerfilUsuario
com.NASeguranca.Util.PerfilUsuarioConverter

[/code]


			    <h:selectOneMenu value="#{Usuario.changeValue}" style=" width : 141px;" > 			     
                <f:selectItems value="#{Usuario.lista}"/>   
              
                </h:selectOneMenu>    

como eu chamo um conversor na pagina?

Você não precisa chamar o conversor, se ele já está registrado pra o tipo, vai ser utilizado automaticamente.

olha só utilizei de outra maneira consegui carregar a pagina e popular o selectOne mas ta dando outro errinho:
o conversor ta assim:

package com.NASeguranca.Util;


	
	import javax.faces.component.UIComponent;
	import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;

import com.NASeguranca.Controller.ControlUsuario;
import com.NASeguranca.Dao.DaoUsuario;
import com.NASeguranca.Model.PerfilUsuario;

	public class ConvertPerfil implements Converter {

	    // Init ---------------------------------------------------------------------------------------
	    
	    private static ControlUsuario cusuario = new ControlUsuario();

	    // Actions ------------------------------------------------------------------------------------
	    
	    public Object getAsObject(FacesContext context, UIComponent component, String value) {
	    
	        return cusuario.Listar(value);
	    }

	    public String getAsString(FacesContext context, UIComponent component, Object value) {
	      
	    	 return ((PerfilUsuario) value).getDescricao();
	    }


}

na pagina ta assim:[code]

		    <h:selectOneMenu value="#{Usuario.selectedItem}" style=" width : 141px;" > 			     
            <f:selectItems value="#{Usuario.lista}"/>  
            <f:converter converterId="perfilconvert" /> 
          
            </h:selectOneMenu>    

[/code]


<converter>
    <converter-id>perfilconvert</converter-id>
    <converter-class>com.NASeguranca.Util.ConvertPerfil</converter-class>
</converter>

e to populando o selectone Assim



	public  List<SelectItem> getLista() throws Exception {          
        List<SelectItem> lista = new LinkedList<SelectItem>();                   
        PerfilUsuario perfil = new PerfilUsuario();    
         IDaoPerfilUsuario idao = new DaoPerfilUsuario();    
         
         List<PerfilUsuario> resultado = (List<PerfilUsuario>) idao.ListarTudo();            
          for(PerfilUsuario teste : resultado){            
                     
            SelectItem item = new SelectItem(teste, teste.getDescricao());      
            lista.add(item);          
                 
         }          
       return lista;          
}

	public PerfilUsuario Listar(String value) {
		// TODO Auto-generated method stub
		Session session = HibernateUtil.getInstance();
		PerfilUsuario list = 
		(PerfilUsuario) session.createQuery("from PerfilUsuario where codigoperfil= :value").uniqueResult();
		
		
		 return list;

o erro é este:


15:40:31,312 INFO  [STDOUT] Hibernate: select nextval ('geraCodCidade')
15:40:31,312 INFO  [STDOUT] Hibernate: insert into usuario (cargo, dataInclusao, login, nome, senha, setor, sobrenome, codigousuario) values (?, ?, ?, ?, ?, ?, ?, ?)
15:40:31,328 WARN  [JDBCExceptionReporter] SQL Error: 0, SQLState: 23502
15:40:31,328 ERROR [JDBCExceptionReporter] ERROR: null value in column "codigoperfil" violates not-null constraint
15:40:31,328 ERROR [AbstractFlushingEventListener] Could not synchronize database state with session
org.hibernate.exception.ConstraintViolationException: could not insert: [com.NASeguranca.Model.Usuario]
	at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:71)
	at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
	at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2267)
	at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2660)
	at org.hibernate.action.EntityInsertAction.execute(EntityInsertAction.java:56)
	at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:250)
	at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:234)
	at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:141)
	at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:298)
	at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:27)
	at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1000)
	at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:338)
	at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:106)
	at com.NASeguranca.Dao.DaoUsuario.salvar(DaoUsuario.java:77)
	at com.NASeguranca.Controller.ControlUsuario.create(ControlUsuario.java:94)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.apache.el.parser.AstValue.invoke(AstValue.java:131)
	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:77)
	at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:91)
	at javax.faces.component.UICommand.broadcast(UICommand.java:383)
	at org.ajax4jsf.component.AjaxViewRoot.processEvents(AjaxViewRoot.java:186)
	at org.ajax4jsf.component.AjaxViewRoot.broadcastEvents(AjaxViewRoot.java:164)
	at org.ajax4jsf.component.AjaxViewRoot.processApplication(AjaxViewRoot.java:352)
	at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:97)
	at com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:251)
	at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:117)
	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:244)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:141)
	at org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:281)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
	at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:179)
	at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:84)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
	at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:157)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:241)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:580)
	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
	at java.lang.Thread.run(Thread.java:619)
Caused by: org.postgresql.util.PSQLException: ERROR: null value in column "codigoperfil" violates not-null constraint
	at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:1512)
	at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1297)
	at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:188)
	at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:437)
	at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:353)
	at org.postgresql.jdbc2.AbstractJdbc2Statement.executeUpdate(AbstractJdbc2Statement.java:307)
	at org.hibernate.jdbc.NonBatchingBatcher.addToBatch(NonBatchingBatcher.java:23)
	at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2247)
	... 51 more
15:40:31,328 ERROR [STDERR] org.hibernate.exception.ConstraintViolationException: could not insert: [com.NASeguranca.Model.Usuario]
	at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:71)
	at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
	at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2267)
	at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2660)
	at org.hibernate.action.EntityInsertAction.execute(EntityInsertAction.java:56)
	at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:250)
	at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:234)
	at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:141)
	at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:298)
	at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:27)
	at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1000)
	at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:338)
	at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:106)
	at com.NASeguranca.Dao.DaoUsuario.salvar(DaoUsuario.java:77)
	at com.NASeguranca.Controller.ControlUsuario.create(ControlUsuario.java:94)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.apache.el.parser.AstValue.invoke(AstValue.java:131)
	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:77)
	at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:91)
	at javax.faces.component.UICommand.broadcast(UICommand.java:383)
	at org.ajax4jsf.component.AjaxViewRoot.processEvents(AjaxViewRoot.java:186)
	at org.ajax4jsf.component.AjaxViewRoot.broadcastEvents(AjaxViewRoot.java:164)
	at org.ajax4jsf.component.AjaxViewRoot.processApplication(AjaxViewRoot.java:352)
	at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:97)
	at com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:251)
	at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:117)
	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:244)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:141)
	at org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:281)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
	at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:179)
	at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:84)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
	at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:157)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:241)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:580)
	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
	at java.lang.Thread.run(Thread.java:619)
Caused by: org.postgresql.util.PSQLException: ERROR: null value in column "codigoperfil" violates not-null constraint
	at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:1512)
	at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1297)
	at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:188)
	at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:437)
	at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:353)
	at org.postgresql.jdbc2.AbstractJdbc2Statement.executeUpdate(AbstractJdbc2Statement.java:307)
	at org.hibernate.jdbc.NonBatchingBatcher.addToBatch(NonBatchingBatcher.java:23)
	at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2247)
	... 51 more
15:40:31,390 INFO  [STDOUT] Hibernate: select perfilusua0_.codigoperfil as codigope1_15_, perfilusua0_.descricao as descricao15_ from perfilUsuario perfilusua0_
15:40:31,406 INFO  [STDOUT] Hibernate: select perfilusua0_.codigoperfil as codigope1_15_, perfilusua0_.descricao as descricao15_ from perfilUsuario perfilusua0_

por favor gente se algum souber como acertar isto me avise por favor pois ja estou a semanas tentando e nao funfa!
obrigada bjos

aew to com o mesmo problema qdo tu conseguir resolver me avise, se eu conseguir primeiro passo pra ti,
ja revirei td tbm mas ninguem sabe
t+

combinado :slight_smile:

oi gatinha da uma olhada neste link pq os cara aqui jamais vao te responder a isso, he mto alto nivel pra eles, vc tem msn?
nem da para acreditar q vc programa em java vc he mto bonita rsrsr xau bjao pra ti

http://www.ibm.com/developerworks/java/library/j-jsf3/#N102E6

tente usar este conversor aqui:


package com.NASeguranca.Util;

import java.util.Map;

import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;

import com.NASeguranca.Model.PerfilUsuario;

	public class GenericConverter implements Converter{
        public Object getAsObject(FacesContext context, UIComponent
component, String value) {
        if (value != null) {
                System.out.println(value+" esse aqui é o super valor");
            return getAttributes(component).get(value);
        }else{
                System.out.println("tudo errado");
        }
        return null;
    }

    public String getAsString(FacesContext context, UIComponent
component, Object value) {
        if (value instanceof PerfilUsuario) {
            System.out.println(value.getClass());
            System.out.println("3");
            PerfilUsuario vo = (PerfilUsuario) value;
            getAttributes(component).put(String.valueOf(vo.getCodigoperfil()),
vo);
            return String.valueOf(vo.getCodigoperfil());
        }

        return "0";
    }

    private Map&lt;String,Object&gt; getAttributes(UIComponent component) {
        return component.getAttributes();
    }

}

ta dando um errinho aew da uma tenta aew e me fala depois abraços

Posta o método salvar do seu bean.

o metodo salvar ta assim


public String  create() {
		IDaoUsuario ldao = new DaoUsuario();	 

		ldao.salvar(usuario);
		
		return "sucesso_incUsuario";
	}

ta dando este erro aqui qdo tento salvar

sourceId=j_id_jsp_1292699378_1:j_id_jsp_1292699378_23[severity=(ERROR 2), summary=(/view/Usuario/usuario.jsp(68,7) '#{Usuario.selectedItem}' Property 'selectedItem' not writable on type javax.faces.model.SelectItem), detail=(/view/Usuario/usuario.jsp(68,7) '#{Usuario.selectedItem}' Property 'selectedItem' not writable on type javax.faces.model.SelectItem)]

valew pela atencao abracos

Oi lgweb,

o erro ocorre quando? Em que linha de que classe?

segue um exemplo de um converter que uso e funciona blz.

public class ConverterCidade implements Converter {
	
	@Override
	public Object getAsObject(FacesContext arg0, UIComponent arg1, String arg2) {
		Cidade Cidade = new Cidade();		
		Cidade = new CidadeDAO().getCidade(Integer.parseInt(arg2));					
		return Cidade;
	}

	@Override
	public String getAsString(FacesContext arg0, UIComponent arg1, Object arg2) {
		if(arg2 instanceof Cidade){
		    return (arg2 == null)?"":String.valueOf(((Cidade)arg2).getCodigo());
		}else{
			return String.valueOf(arg2);
		}
	}
}

nao consegui entenderr como funciona este conversor meu codigo ta assim:
PerfilUsuario


package com.NASeguranca.Model;

import java.util.Set;

import javax.persistence.*;

import org.hibernate.annotations.Cascade;
import org.hibernate.annotations.CascadeType;

@Entity @Table(name="perfilUsuario")
@SequenceGenerator(name = "geraCodPerfil", sequenceName = "geraCodPerfil")
public class PerfilUsuario {
	@Id @GeneratedValue(strategy = GenerationType.AUTO, generator = "geraCodPerfil")
	private Long codigoperfil;
	private String descricao;  //adm -- super---limitado
	
	@OneToMany(mappedBy="perfilusuario", fetch = FetchType.LAZY)
	@Cascade(CascadeType.ALL)
	private Set&lt;Usuario&gt; usuario;
	
	public PerfilUsuario(){}

	public Long getCodigoperfil() {
		return codigoperfil;
	}

	public void setCodigoperfil(Long codigoperfil) {
		this.codigoperfil = codigoperfil;
	}

	public String getDescricao() {
		return descricao;
	}

	public void setDescricao(String descricao) {
		this.descricao = descricao;
	}

	public Set&lt;Usuario&gt; getUsuario() {
		return usuario;
	}

	public void setUsuario(Set&lt;Usuario&gt; usuario) {
		this.usuario = usuario;
	}
	
	public String toString() {
        // Override Object#toString() so that it returns a human readable String representation.
        // It is not required by the Converter or so, it just pleases the reading in the logs.
        return "PerfilUsuario[" + codigoperfil + "," + descricao + "]";
    }

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result
				+ ((codigoperfil == null) ? 0 : codigoperfil.hashCode());
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		final PerfilUsuario other = (PerfilUsuario) obj;
		if (codigoperfil == null) {
			if (other.codigoperfil != null)
				return false;
		} else if (!codigoperfil.equals(other.codigoperfil))
			return false;
		return true;
	}
	
	

}

o usuario assim:


package com.NASeguranca.Model;

import java.util.Date;
import java.util.LinkedList;
import java.util.List;
import java.util.Set;

import javax.faces.model.SelectItem;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

import org.hibernate.annotations.Cascade;
import org.hibernate.annotations.CascadeType;
import org.hibernate.annotations.Fetch;
import org.hibernate.annotations.FetchMode;

import com.NASeguranca.Dao.DaoEstado;
import com.NASeguranca.Idao.IDaoEstado;

@Entity @Table(name="usuario")
@SequenceGenerator(name = "geraCodCidade", sequenceName = "geraCodCidade")
public class Usuario {
	@Id @GeneratedValue(strategy = GenerationType.AUTO, generator = "geraCodCidade")
	private int codigousuario;
//	private int codigoPerfil;
	private String nome ;
	private String sobrenome;
	private String  setor;
	private String  cargo;
	@Temporal(TemporalType.DATE)
	private Date dataInclusao= new Date();
	private int senha;
	private String login;
	
	@ManyToOne(fetch = FetchType.EAGER)
	@JoinColumn(name="codigoperfil",
	insertable=true, updatable=true)
	@Fetch(FetchMode.JOIN)
	@Cascade(CascadeType.SAVE_UPDATE)
	
	private PerfilUsuario perfilusuario;
	
	@OneToMany(mappedBy="usuario", fetch = FetchType.LAZY)
	@Cascade(CascadeType.ALL)
	private Set&lt;PedidoCompra&gt; pedidoCompra;
	
	
	@OneToMany(mappedBy="usuario", fetch = FetchType.LAZY)
	@Cascade(CascadeType.ALL)
	private Set&lt;Pedido&gt; pedido;
	public Usuario(){}
	public int getCodigousuario() {
		return codigousuario;
	}
	public void setCodigousuario(int codigousuario) {
		this.codigousuario = codigousuario;
	}
	public String getNome() {
		return nome;
	}
	public void setNome(String nome) {
		this.nome = nome;
	}
	public String getSobrenome() {
		return sobrenome;
	}
	public void setSobrenome(String sobrenome) {
		this.sobrenome = sobrenome;
	}
	public String getSetor() {
		return setor;
	}
	public void setSetor(String setor) {
		this.setor = setor;
	}
	public String getCargo() {
		return cargo;
	}
	public void setCargo(String cargo) {
		this.cargo = cargo;
	}
	public Date getDataInclusao() {
		return dataInclusao;
	}
	public void setDataInclusao(Date dataInclusao) {
		this.dataInclusao = dataInclusao;
	}
	public int getSenha() {
		return senha;
	}
	public void setSenha(int senha) {
		this.senha = senha;
	}
	public String getLogin() {
		return login;
	}
	public void setLogin(String login) {
		this.login = login;
	}
	public PerfilUsuario getPerfilusuario() {
		return perfilusuario;
	}
	public void setPerfilusuario(PerfilUsuario perfilusuario) {
		this.perfilusuario = perfilusuario;
	}
	public Set&lt;PedidoCompra&gt; getPedidoCompra() {
		return pedidoCompra;
	}
	public void setPedidoCompra(Set&lt;PedidoCompra&gt; pedidoCompra) {
		this.pedidoCompra = pedidoCompra;
	}
	public Set&lt;Pedido&gt; getPedido() {
		return pedido;
	}
	public void setPedido(Set&lt;Pedido&gt; pedido) {
		this.pedido = pedido;
	}
	
	 private  List&lt;SelectItem&gt; getLista() throws Exception {          
         List&lt;SelectItem&gt; lista = new LinkedList&lt;SelectItem&gt;();                   
          Estado uf;      
          IDaoEstado idao= new DaoEstado();        
          List&lt;Estado&gt; resultado = (List&lt;Estado&gt;) idao.ListarTodos();            
           for(Estado teste : resultado){            
                      
             SelectItem item = new SelectItem(teste.getCodigoUf(),teste.getSigla());      
             lista.add(item);          
                  
          }          
        return lista;          
}
	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + codigousuario;
		result = prime * result
				+ ((perfilusuario == null) ? 0 : perfilusuario.hashCode());
		return result;
	}
	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		final Usuario other = (Usuario) obj;
		if (codigousuario != other.codigousuario)
			return false;
		if (perfilusuario == null) {
			if (other.perfilusuario != null)
				return false;
		} else if (!perfilusuario.equals(other.perfilusuario))
			return false;
		return true;
	}  
	

}

e o controlUsuario ta assim:



package com.NASeguranca.Controller;

import java.util.LinkedList;
import java.util.List;

import javax.faces.context.FacesContext;
import javax.faces.model.DataModel;
import javax.faces.model.ListDataModel;
import javax.faces.model.SelectItem;
import javax.persistence.Query;

import org.hibernate.Session;

import com.NASeguranca.Dao.DaoEstado;
import com.NASeguranca.Dao.DaoPerfilUsuario;
import com.NASeguranca.Dao.DaoUsuario;
import com.NASeguranca.Idao.IDaoEstado;
import com.NASeguranca.Idao.IDaoPerfilUsuario;
import com.NASeguranca.Idao.IDaoUsuario;
import com.NASeguranca.Model.Estado;
import com.NASeguranca.Model.PerfilUsuario;
import com.NASeguranca.Model.Usuario;
import com.NASeguranca.Util.HibernateUtil;

public class ControlUsuario {	
		
	private DataModel model;	
	private Usuario usuario = new Usuario(); 
	public SelectItem selectedItem = new SelectItem();
	// private PerfilUsuario selectedItem;
	public  List&lt;SelectItem&gt; lista = new LinkedList&lt;SelectItem&gt;(); 
	
    public ControlUsuario(){}    
    

    
	public String novo() {
		usuario = new Usuario();
		return "novoUsuario";
	}

	public Usuario getUsuario() {
		return usuario;
	}

	public void setUsuario(Usuario objeto) {
		this.usuario = objeto;
	}

	public DataModel getTodos() {
		 
		IDaoUsuario ldao = new DaoUsuario();
		model = new ListDataModel(ldao.ListarTodos());
		return model;

	}
	public DataModel getTodosUsuario(){
		
		IDaoUsuario ldao = new DaoUsuario();
		model = new ListDataModel(ldao.ListarTodos());
		return model;
		
	}
	public Usuario  getUsuarioFromEditOrDelete() {
		Usuario objeto = (Usuario) model.getRowData();
		return objeto;

	}

	public String editar() {
		Usuario usuario = getUsuarioFromEditOrDelete();
		setUsuario(usuario);
		return "editarUsuario";

	}

	public String update() {
		IDaoUsuario ldao = new DaoUsuario();
		ldao.atualizar(usuario);
		return "sucessoUsuario";
	}

	public String excluir() {
		IDaoUsuario ldao = new DaoUsuario();
		Usuario usuario = getUsuarioFromEditOrDelete();
		ldao.excluir(usuario);
		return "sucessoDeleteUsuario";

	}

	public String  create() {
		IDaoUsuario ldao = new DaoUsuario();	 

		ldao.salvar(usuario);
		
		return "sucesso_incUsuario";
	}

		
	
	
	
	
	// adicionar os itens abaixo como extras
	private String keysearch;

	public String getKeysearch() {
		return keysearch;
	}

	public void setKeysearch(String keysearch) {
		this.keysearch = keysearch;
	}

	public DataModel getTodaskeysearch() {
		IDaoUsuario idao = new DaoUsuario();
		model = new ListDataModel(idao.consultar(keysearch));
		return model;

	}

	public DataModel getTodosComNome() {
		IDaoUsuario idao = new DaoUsuario();
		model = new ListDataModel(idao.ListarTodos());
		return model;

	}

	public javax.faces.model.DataModel getModel() {
		return model;
	}

	public void setModel(javax.faces.model.DataModel model) {
		this.model = model;
	}


	public  List&lt;SelectItem&gt; getLista() throws Exception {          
        List&lt;SelectItem&gt; lista = new LinkedList&lt;SelectItem&gt;();                   
        PerfilUsuario perfil = new PerfilUsuario();    
         IDaoPerfilUsuario idao = new DaoPerfilUsuario();    
         
         List&lt;PerfilUsuario&gt; resultado = (List&lt;PerfilUsuario&gt;) idao.ListarTudo();            
          for(PerfilUsuario teste : resultado){            
                     
            SelectItem item = new SelectItem(teste.getCodigoperfil(),teste.getDescricao());      
            lista.add(item);          
                 
         }          
       return lista;          
}

	 


	public void setLista(List&lt;SelectItem&gt; lista) {
		this.lista = lista;
	}



	public SelectItem getSelectedItem() {
		return selectedItem;
	}



	public void SelectItem(SelectItem selectedItem) {
		this.selectedItem = selectedItem;
	}


	
}

agora nao entendi como ficaria meu conversor
valew pela ajuda abracos

Em que linha de que método ocorre o erro?

so sei que é na hora de salvar, estou usano redhat e nao sei debugar nele, vou tentar usar seu exemplo pra ver se funciona

obrigada maurenginaldo ja estou a semanas com este problema e nao consegui resolver ainda vou testar seu codigo brigadao bjos maurenginaldo

nao entendi o seu metodo:


    Cidade = new CidadeDAO().getCidade(Integer.parseInt(arg2));

seria um metodo no seu dao que carrega uma cidade do banco pelo codigo?

Sim, mas como estou usando hibernate, ele busca no contexto de persistencia.

cara to quebrando a cabeca com este problema deve ser algum erro bobo, meu converter ficou assim:[code]

package com.NASeguranca.Util;

import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;

import com.NASeguranca.Controller.ControlUsuario;
import com.NASeguranca.Dao.DaoPerfilUsuario;
import com.NASeguranca.Dao.DaoUsuario;
import com.NASeguranca.Model.PerfilUsuario;
import com.NASeguranca.Model.Usuario;

public class ConvertPerfil implements Converter {

public Object getAsObject(FacesContext arg0, UIComponent arg1, String arg2) {  
        	PerfilUsuario perfil = new PerfilUsuario(); 
        	PerfilUsuario loadPerfil = new DaoUsuario().consultar(Integer.parseInt(arg2));                   
            return loadPerfil;  
       }  
      
      
       public String getAsString(FacesContext arg0, UIComponent arg1, Object arg2) {  
           if(arg2 instanceof PerfilUsuario){  
               return (arg2 == null)?"":String.valueOf(((PerfilUsuario)arg2).getCodigoperfil());  
           }else{  
               return String.valueOf(arg2);  
           }  
       }  
   }  

e o controle ficou assim
[/code]


	public  List&lt;SelectItem&gt; getLista() throws Exception {          
        List&lt;SelectItem&gt; lista = new LinkedList&lt;SelectItem&gt;();                   
        PerfilUsuario perfil = new PerfilUsuario();    
         IDaoPerfilUsuario idao = new DaoPerfilUsuario();    
         
         List&lt;PerfilUsuario&gt; resultado = (List&lt;PerfilUsuario&gt;) idao.ListarTudo();            
          for(PerfilUsuario teste : resultado){            
                     
            SelectItem item = new SelectItem(teste.getCodigoperfil(),teste.getDescricao());      
            lista.add(item);          
                 
         }          
       return lista;          
}



	private DataModel model;	
	private Usuario usuario = new Usuario(); 
//	public SelectItem selectedItem = new SelectItem();
	 private PerfilUsuario selectedItem;
	public  List&lt;SelectItem&gt; lista = new LinkedList&lt;SelectItem&gt;(); 

aqui ta uma duvida eu devo usar um tipo PerfilUsuario ou um SelectItem?
e o converter eu coloco ele na pagina no SelectOne ou no SelectItems?

abracos.

fbarreto: Conseguiu Resolver seu problema??? (vi q vc abriu outra thread, rsrs).

Da forma q te disse antes não funcionou?

té mais!

Bom dia Lgweb.

Não sei como vc está linkando os componentes da tela com seu objeto Usuario, mas se tiver
usando tudo normal, setado no value de cada componente, você não vai precisar mais dessa linha:

private PerfilUsuario selectedItem; 

No value do selecOne vc coloca:

value="#{usuarioBean.usuario.perfilUsuario}"

O converter já vai fazer a conversão e setar o valor correto para vc.

Vc coloca no SelectOne.

Testa aí.

Bom dia maurenginaldo, olha só testei e ta dando o seguinte erro:

Caused by: org.postgresql.util.PSQLException: ERROR: null value in column "codigoperfil" violates not-null constraint

o conversor ficou assim:


 //@Override  Com esta anotacao nao ta compilando
	      public Object getAsObject(FacesContext arg0, UIComponent arg1, String arg2) {  
	          PerfilUsuario PerfilUsuario = new PerfilUsuario();         
	          PerfilUsuario = new DaoPerfilUsuario().consultar(Integer.parseInt(arg2));                   
	          return PerfilUsuario;  
	      }  
	    
	     // @Override  
	      public String getAsString(FacesContext arg0, UIComponent arg1, Object arg2) {  
	          if(arg2 instanceof PerfilUsuario){  
	              return (arg2 == null)?"":String.valueOf(((PerfilUsuario)arg2).getCodigoperfil());  
	          }else{  
	              return String.valueOf(arg2);  
	          }  
	      }  

o metodo consultar ta executando esta consulta aqui:


public PerfilUsuario consultar(int  codigo) {
			// TODO Auto-generated method stub
			session = HibernateUtil.getInstance();
			Query query =  session.createQuery(
					"from PerfilUsuario Pu where Pu.codigoperfil = :codigo " );
		PerfilUsuario list = (PerfilUsuario) query.setInteger("codigo",codigo).uniqueResult();
			
			
			return list;
			
		}

e o select one ficou assim :


&lt;h:outputText value="#{msg.perfil}"&gt;&lt;/h:outputText&gt;	
			
			    &lt;h:selectOneMenu value="#{Usuario.usuario.perfilusuario}" style=" width : 141px;" converter="perfilconvert"&gt; 			     
                &lt;f:selectItems value="#{Usuario.lista}"/&gt;              
              
                &lt;/h:selectOneMenu&gt; 

Ele ta populando o selectone so na hora de gravar que nao dá, que podes ser?
obrigado maurenginaldo pela atencao, abracos