Ajuda p/ converter valor

10 respostas
fbarreto

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

10 Respostas

fbarreto

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

rafagil

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?

fbarreto

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

rafagil

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?

fbarreto

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

fbarreto

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: '[telefone removido]' must be a number consisting of one or more digits.), detail=(j_id_jsp_994863871_1:j_id_jsp_994863871_27: '[telefone removido]' must be a number between -[telefone removido] and [telefone removido] Example: 9346)]
rafagil

changeValue é um Integer?

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

fbarreto
AQUI O CODIGO DO MANAGEDBEAN:
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;
	
	
	
	
}
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?

fbarreto

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

rafagil

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:

Criado 25 de fevereiro de 2008
Ultima resposta 26 de fev. de 2008
Respostas 10
Participantes 2