Seam Converter de Entity

20 11 2008

O Problema

Exibir apenas uma coluna de uma determinada entidade, por exemplo exibir o nome de uma pessoa.

A Solução

package br.unioeste.sgppls;

import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
import javax.faces.convert.ConverterException;
import javax.persistence.EntityManager;

import org.jboss.seam.annotations.Name;

@Name("ConverterEntityarConhecimento")
@org.jboss.seam.annotations.faces.Converter
public class ConverterEntityarConhecimento implements Converter {

	public Object getAsObject(FacesContext arg0, UIComponent arg1, String arg2) {
		try {
			EntityManager entityManager = (EntityManager) org.jboss.seam.Component
				.getInstance("entityManager", true);
			Object o = entityManager.createQuery(
				"from ArConhecimento ar WHERE ar.arCnhCodigo = :codigo")
				.setParameter("codigo", arg2).getSingleResult();
			return o;
		} catch (Exception e) {
			throw new ConverterException(e);
		}
	}

	public String getAsString(FacesContext arg0, UIComponent arg1, Object arg2) {
		try {
			ArConhecimento a = (ArConhecimento) arg2;
			return a.getArCnhCodigo();
		} catch (Exception e) {
			throw new ConverterException(e);
		}
	}
}

A Visão

Meu campo input esta ligado diretamente com o atributo que é uma outra entidade, sendo assim é necessário usar o conversor para exibir a coluna de ‘descrição’

<h:inputText value="#{projetoHome.instance.arConhecimento}" id="text" size="15" converter="ConverterEntityarConhecimento" required="true"/>

Ações

Information

5 responses

24 11 2008
Samarone

Anselmo parabens pelo blog, e quanto a esse post tenho uma questao: Nao seria possivel apenas usar assim na visao?

Estou comecando agora com o seam, se for muito obvio que nao, entao me perdoe. =D

24 11 2008
battisti

Opa fico feliz em ser útil! com relação a sua pergunta o que acontece é o seguinte:

Se na visão JSF você colocar

Sem usar o converter o que será impresso na tela do usuário será a referência ao objeto java. Fiz algumas tentativas sobrescrevendo o toString da minha entidade mas não fui feliz, se tiver alguma outra idéia ou solução por favor compartilhe, pq fazer isso ai pra todas as minhas entity vai dar um trabalho mostro!

[]’s Anselmo Battisti

24 11 2008
Samarone

Olá Anselmo,

Eu estou usando o Jboss Developer Studio versão 2.0 Beta e nela após gerar um projeto SEAM Web ( que por trás dos panos ele executa o seam-gen project ), após a criação da aplicação base. Eu gerei o CRUD das entitys mapeadas no banco de dados usando o SEAM-GEN GENERATE-ENTITIES, o qual ele gera varios arquivos xhtml e page.xml assim como as classes entities e ejb’s – como vc já deve saber. Pois bem, depois disso tudo, na visão eu sou capaz de utilizar contruções como #{solicitacao.tecnico.nome} , sendo que existe no banco de dados a tabela solicitacoes e tecnicos relacionados em n .. 1, respectivamente. Eu não sei explicar exatamente como funciona essa busca. Mais partindo do principio que o seam esta usando o hibernate, essa construção parece muito com as de HQL logo seria normal que ele aceitasse isso desde que as entites estivessem bem mapeadas. O que acha? Sugiro fazer uns testes com seam-gen generate-entities.

PS: Na minha postagem do blog não apareceu a parte de código que coloquei, porque?

Abraço

24 11 2008
battisti

> PS: Na minha postagem do blog não apareceu a parte de código que coloquei, porque?

Pq o wordpress bloqueia 😦 então eu sugiro vc colocar seu codigo fonte no http://paste-it.net/ e colcoar aqui apenas a url

Sobre a sua sugestão #{solicitacao.tecnico.nome} isso funciona porém no meu caso eu estava fazendo uma janela de busca dentro do formulário, é +- assim tem 1 campo input que armazena um codigo e uma imagem que ao ser clicada abre uma popup, nessa popup tem uma lista, quando seleciono algum dos items ele fecha o popup ele faz o ‘binding’ e joga o valor pra dentro do meu input, o que estava acontecendo era que se dpeois disso o usuário trocasse manualmente o valor de dentro do input o hibernate trocava a chave primária do objeto que eu selecionei no popup.

Espero ter conseguido me expressar.

11 08 2009
Roan

Olá,

Sou novo na lista e gostaria de pedir uma ajudinha.
minha situação é o seguinte, tenho um suggestion box no seam (City) aninhado com dois combobox (State e Country). Quando seleciono a cidade por exemplo Salvador no suggestion box, automaticamente o state no combobox é marcado e country como Bahia-Brazil respectivamente. Até ai sem problemas, mas quando submeto o formulario e alguns campos são requeridos ele não processa o meu método, claro. Então no campo state, apenas nele, aparece a msg Value is not valid e o combobox vem vazio. Mas Country vem selecionado como Brazil ainda e o suggestion box como Salvador. Esse erro só aparece se mantenho o foco no campo cidade e submeto, se tirar o foco de cidade ele não dá esse primeiro erro.

A outra situação que me ocorre tbm é ao digitar cidade de outro país e estado, por exemplo Michigan, ele não reRender novamente os campos. Pode me dar uma ajudinha, por favor com isso?

Como posso te mostrar os códigos?

Qualquer ajuda é bem vinda.

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s




%d blogueiros gostam disto: