Problema Com Converter JSF

Bom eu sei que esse problema eh bem comum, mas já passado por ele… porém veio um outro pra atrapalhar…
Tipo eu quando vou salvar um objeto meu converter funciona muito bem, porém quando eu faço uma busca e jogo os dados na tela… ele me traz o objeto errado dessa lista…
Por Exemplo eu um Usuario e nesse usuario tenho um TipoUsuario… quando eu procuro na lista o usuario e mando ele pra tela de alteração, o TipoUsuario vem com o primeiro item da lista…
Digamos q esse Usuario Seja do Tipo Vendedor, quando ele vai pra tela de Alteração ele aparece como Administrador…

Eu Pensei q acho q o problema está no Converter… mas sei lá…

Ai ta o Codigo do Converter…

private GenericDAO<TipoUsuario> dao = new DAOFactory().getTipoUsuarioDAO();

	public Object getAsObject(FacesContext context, UIComponent component, String value) {
		Map<String, Object> parametros = new HashMap<String, Object>();
		parametros.put("descricaoTipoUsuario", value.toString());
		return dao.ObjetoPorCriterio("from TipoUsuario t where t.descricaoTipoUsuario = :descricaoTipoUsuario", parametros);
	}

	public String getAsString(FacesContext context, UIComponent component, Object object) {
		System.out.println(((TipoUsuario)object).getDescricaoTipoUsuario());
		return ((TipoUsuario)object).getDescricaoTipoUsuario();
	}

E o SelectOneMenu…

 <select jsfc="h:selectOneMenu" value="#{mbUsuario.usuario.tipoUsuario}" class="forms_combos" id="tipoUsuario" style="width: 215px;">
												       	<f:selectItems value="#{mbUsuario.listaTipoUsuario}" />
												       	<f:converter converterId="ConverterTipoUsuario"/>
												    </select>	

Se Alguem Puder me Ajudar Agradeço Mto :X

Valeo :smiley:

por favor, poste o metodo getListaTipoUsuario

abrassssssss

public List<SelectItem> getListaTipoUsuario(){
		List<TipoUsuario> myList = new DAOFactory().getTipoUsuarioDAO().listar();
		for(TipoUsuario tu : myList){
			lista.add(new SelectItem(tu,tu.getDescricaoTipoUsuario()));
		}
			return lista;
	}

Tai :stuck_out_tongue:

hmmm … blz…

nos metodos do seu converter o ideal seria vc usar a chave primaria da sua entidade por exemplo o id

posta o metodo equals da entidade TipoUsuario.

abrassss

Deixa vê se eu entendi o que você quer dizer…

Está sendo exibido na tela uma combo de TipoUsuario.

Vamos supor que existem duas registros dessa entidade:

  • Administrador
  • Vendedor

1 ::

Você grava um registro como sendo Administrador

2 ::

Na edição o registro vem como sendo Vendedor

Minhas perguntas:

  • Verificou no banco se o ID é mesmo o do tipo administrador?

  • Verificou o get dele se está trazendo correto.

P.S.: Uma coisa que achei estranha na sua implementação. NÃO se é recomendável usar campo de descrição para pesquisa da forma como você está fazendo, para tabelas como “tipo” é recomendável que se tenha um campo do tipo “sigla” que seja único, dessa forma a sua busca será feita usando tal campo. A não ser que a descrição consiga realmente ter essa mesma característica.

Renan - Não Tem Metodo Equals Nem Hashcode Nas Minhas Classes Pojo :D.

Grinvon - Se eu não tivesse certeza absoluta que os dados fossem iguais não teria feito assim… quanto a isso acho q ta tranquilo…

Renan Eu tb acho q as buscar deveriam ser feitas pela Pk mas n consegui implementar algo assim…
Pq pelo modo q aprendi como o SelectOneMenu vai me passar a String q nele está entao por isso eu procurava por ela propria…

vc vai precisar implementar esses metodos pois é assim que o framework consegue selecionar o item correto pra vc…

quanto a implementação do converter é basicamente a mesma coisa, porem buscando pela chave primaria.

qq coisa postae

abrassssssss

Mas o equals e Hashcode eu posso mandar ele criar pelo eclipse mesmo…

meu problema não como eu vou fazer a busca… o problema eh como o combo vai retornar um codigo pra eu pesquisar?

Que Otimo So Implementei o Hashcode e Equals pelo Id da Classe…
E Aparentemente Funcionou…

Muito Obrigado a todos que cooperaram ;D

Mas Voltando Renan Como ficaria pra fazr a busca por Id…

amigo, é uma busca no banco pelo id da entidade!

no seu caso o objeto dao faz essa busca, imagino eu.

algo do tipo:

Map<String, Object> parametros = new HashMap<String, Object>();  

parametros.put("id", value);

return dao.ObjetoPorCriterio("from TipoUsuario t where t.id = :id", parametros);

aconselho vc entender bem o conceito e como funcionam os custom converters

abrassssssss