JSF SelectOneMenu + JPA + SEAM

Oi pessoal,

Eu to fazendo uma aplicação que usa a tag:

<h:selectOneMenu  id="objetos" value="#{user.loja}">
	<f:selectItems value="#{register.lojasOptions}"/>
	<f:converter converterId="com.jsf.Conversores"/>
	<rich:beanValidator />
</h:selectOneMenu>

O problema é que na hora de persistir no banco ele não faz pois o Conversor nao transforma o Objeto na instancia loja.

O método de conversão:

public Object getAsObject(FacesContext arg0, UIComponent arg1, String value) {
		try {
			if (value == null || value.equalsIgnoreCase("-1")){
				return null;
			}
			int id = Integer.parseInt(value);
			Loja aux = em.find(Loja.class, id);
			return aux;

		} catch (NumberFormatException ne) {
			throw new ConverterException("Não foi possível converter (" + value
					+ ") para Estado: não é um número inteiro.", ne);
		} catch (IllegalArgumentException e) {
			throw new ConverterException("Não foi possível converter (" + value
					+ ") para Estado: identificador desconhecido.", e);
		} catch (Exception e) {
			throw new ConverterException("Não foi possível converter (" + value
					+ ") para Estado: identificador desconhecido.", e);
		}
	}

Ele cai no Exception na hora em que ele tenta dar o em.find(Loja.class, id);
Daí gera esse warning:

WARNING: FacesMessage(s) have been enqueued, but may not have been displayed.
sourceId=register:loja[severity=(ERROR 2), summary=({0}: Conversion error occurred.), detail=({0}: Conversion error occurred.)]

Já pesquisei nos fóruns sobre isso mas não encontrei nenhum que solucionasse isso.

Alguém pode ajudar?

Obrigado

Depois de várias respostas eu consegui resolver :wink: .

E qual foi a solução?

Como ele retornava um int, então eu resolvi só colocar um:

<h:selectOneMenu id="loja"
	value="#{user.mergeLoja}">
	<f:selectItem itemValue="" itemLabel="Escolha uma loja" />
	<f:selectItems value="#{register.lojasOptions}" />
</h:selectOneMenu> <br />

e depois eu botei para salvar…

Loja loja = em.find(Loja.class, user.getMergeLoja());
user.setLoja(loja);
em.persist(user);

Não usei o conversor, não sei se é a melhor solução também, mas como os exemplos que eu vi estavam meio fora do que eu procurava, para mim essa solução foi a mais simples.