Ajuda p/ converter valor

ola pessoal boa noite to com uma duvida aqui que nao consigo resolver, e o seguinte
preciso que na hora de salvar um usuario ele salve o perfil do usuario que e um outro objetoque e carregado para um selectOneMenu desta forma:


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;          
}

o selectOne ta assim:

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

entao como faco para converter este valor que esta no selectOneMenu para que PerfilUsuario?

por favor me ajudem pois nao consio de jeito nenhum.
bjos

Poxa gente ninguem aqui pode me ajudar,ja tentei de td e nao consegui, por favor me deem dicas preciso mto disso :cry:
bjos

Olha, o correto seria fazer um Converter (mas eu ainda não sei como fazer, rsrs)

mas como ninguem se manifestou, e vc precisa resolver seu problema, vc pode fazer da seguinte forma:

quando o form é submetido, sua propriedade changeValue será igual ao codigoPerfil, certo?

dessa forma vc tem o Id do código, e pode recuperar o objeto a partir dele.

Entendeu? (se não, pergunta denovo, rsrs, não sou mto bom pra explicar)

Vc está usando Hibernate ou JPA?

ola obrigado por responder eu estou tentando fazer assim:



public PerfilUsuario loadPerfil() {
			// TODO Auto-generated method stub
			session = HibernateUtil.getInstance();			
			Query query =  session.createQuery(
					"from PerfilUsuario p where p.codigoperfil= :codigo" );
			 Object value = FacesContext.getCurrentInstance().getExternalContext()
			 .getRequestParameterMap().get("id");  
			 List<PerfilUsuario> list = (List<PerfilUsuario>)query.setInteger("codigo", (Integer)value).list();	
			return (PerfilUsuario) list;
			
		
			
		}

mas ta dando erro, mas obrigado pela dica bjos

Esta linha aqui está “errada”:

Object value = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("id");    

porque vc não está passando o id do objeto por parametro.

supondo que o método que vc passou pertence a classe Usuario (nome do managed bean q vc está usando) faça desta forma:

(Edit Encontrei outro erro): Vc está fazendo o Cast de uma lista para um objeto PerfilUsuario, vc deve pegar o primeiro resultado, segue o codigo corrigido

public PerfilUsuario loadPerfil() {  
    // TODO Auto-generated method stub  
    session = HibernateUtil.getInstance();            
    Query query =  session.createQuery(  
        "from PerfilUsuario p where p.codigoperfil= :codigo" );  
    Object value = 
     PerfilUsuario perfil = (PerfilUsuario) query.setInteger("codigo", changeValue).uniqueResult();   


   return perfil;  



}  

porque o valor do changeValue é o codigo do selectItem.

Entendeu o problema?

Entendi sim, vou tentar agora pra ver se da certo, axo que vou executar o metodo na hora de salvar, valew pela ajuda,bjao

ta dando este erro aqui agora:


11:52:42,750 INFO  [STDOUT] Hibernate: select perfilusua0_.codigoperfil as codigope1_15_, perfilusua0_.descricao as descricao15_ from perfilUsuario perfilusua0_
11:52:42,750 INFO  [STDOUT] Hibernate: select perfilusua0_.codigoperfil as codigope1_15_, perfilusua0_.descricao as descricao15_ from perfilUsuario perfilusua0_
11:52:42,781 INFO  [lifecycle] WARNING: FacesMessage(s) have been enqueued, but may not have been displayed.
sourceId=j_id_jsp_994863871_1:j_id_jsp_994863871_23[severity=(ERROR 2), summary=(Conversion Error setting value '1' for 'null Converter'. ), detail=(Conversion Error setting value '1' for 'null Converter'. )]
sourceId=j_id_jsp_994863871_1:j_id_jsp_994863871_27[severity=(ERROR 2), summary=(j_id_jsp_994863871_1:j_id_jsp_994863871_27: '3333333333' must be a number consisting of one or more digits.), detail=(j_id_jsp_994863871_1:j_id_jsp_994863871_27: '3333333333' must be a number between -2147483648 and 2147483647 Example: 9346)]

changeValue é um Integer?

Tem como vc postar o código todo da classe?

AQUI O CODIGO DO MANAGEDBEAN:[code]

package com.NASeguranca.Controller;

import java.awt.event.ActionEvent;
import java.util.LinkedList;
import java.util.List;

import javax.faces.model.DataModel;
import javax.faces.model.ListDataModel;
import javax.faces.model.SelectItem;

import org.hibernate.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(); 
private SelectItem changeValue = new SelectItem();
public  List<SelectItem> lista = new LinkedList<SelectItem>(); 

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 objeto = getUsuarioFromEditOrDelete();
	setUsuario(objeto);
	return "editarUsuario";

}

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

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

}



// 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;
}


//AQUI E PREENCHIDO O SELECTONEMENU COM OS PERFIS DISPONIVEIS NO BANCO
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;          

}

public SelectItem getChangeValue() {
	return changeValue;
}



public void setChangeValue(SelectItem changeValue) {
	this.changeValue = changeValue;
}



public void setLista(List<SelectItem> lista) {
	this.lista = lista;
}



private Session session;
public PerfilUsuario perfil;

}

[/code]

o selectOne na pagina ta assim:



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

o que eu quero e que qdo eu for salvar um usuario ele carregue o perfil do usuario de acordo com o valor setado no SelectOne, mas como as outras formas que ja tentei acima nao deram certo,alguem pode ajudar?

desisto! ai que vontade de xorar :cry: :cry: :cry:

Crie uma variavel de instancia do tipo Integer, chamada, por exemplo, codPerfil.

crie os getters e setters,

mude no Jsf o parametro value para value="#{Usuario.codPerfil}";

altere o código q te passei para usar codPerfil ao invés do changeValue.

Tenta aí, não desiste ainda :slight_smile: