Problema com converter

11 respostas
S

Olá pessoal, estou com dificuldades de usar um converter, a primeira parte do código abaixo, trata-se de um componente autocomplete, que funciona de forma adequada, quando clico sobre o valor, eu o obtenho, exactamente como gostaria, porém o meu problema é mais simples; abaixo dele tenho um commandLink que gostaria que quando digitasse parte de um nome, pudesso localizá-lo e repassa ao método buscaPorNome, porém isso não acontece, obtenho uma excessão como abaixo, porque não estou conseguindo construir um converter de modo adequado.
Podem me ajudar?
Página:
<div id="campos"> <p:autoComplete id="complete" value="#{empresaBean.empresa}" var="empresa" completeMethod="#{empresaBean.autocompleteEmpresa}" itemLabel="#{empresa.nome}" itemValue="#{empresa}" onkeyup="this.value = this.value.toUpperCase();" maxResults="5" size="82" converter="Converter" effect="slide" > <p:ajax event="itemSelect" update="complete" /> </p:autoComplete> </div> <div id="botaopesq"> <p:commandLink actionListener="#{empresaBean.buscarPorNome}" title="Pesquisar" value="#{empresa.nome}" action="pesquisa"> <h:graphicImage library="images" name="botao.png" width="118" height="27" style="border:0" /> <f:setPropertyActionListener target="#{empresaBean.empresa}" value="#{empresa.nome}" /> </p:commandLink>

Excessão:

at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) at java.lang.Integer.parseInt(Integer.java:492)

Converter:

package com.portal.view;

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

import com.portal.empresa.Empresa;
import com.portal.empresa.EmpresaRN;

@FacesConverter(value = "Converter")
public class EntityConverter implements Converter {

	@Override
	public Object getAsObject(FacesContext context, UIComponent component, String value) {
		if (value != null && value.trim().length() > 0) {
			Integer id = Integer.valueOf(value);
			try {
				EmpresaRN empresaRN = new EmpresaRN();
				return empresaRN.carregar(id);
			} catch (Exception e) {
				throw new ConverterException("N�o foi poss�vel encontrar a a empresa de c�digo" + value + "." + e.getMessage());
			}
		}
		return null;
	}

	@Override
	public String getAsString(FacesContext context, UIComponent component, Object value) {
		if (value != null) {
			Empresa empresa = (Empresa) value;
			return String.valueOf(empresa.getId());
		}
		return "";

	}
}

Autocomplete:

public List<Empresa> autocompleteEmpresa(String query) {
		List<Empresa> results = new ArrayList<Empresa>();
		if (empresas.isEmpty()) {
			this.empresas = empresaRN.complete();
		}
		for (Empresa e : empresas) {
			if (e.getNome().startsWith(query)) {
				results.add(e);
			}
		}
		return results;
	}

Método pelo qual busco a empresa pelo nome:

public List<Empresa> buscarPorNome() {
		if (this.listaPesquisa == null) {
			this.listaPesquisa = empresaRN.buscaPorNome(empresa.getNome());
		}

		return this.lista;
	}

11 Respostas

giovanni_dalfre

Não sei se é isso, mais pelo que eu entendi, ele nao ta convertendo o numero pra string.

Tenta fazer isso:

@Override  
    public String getAsString(FacesContext context, UIComponent component, Object value) {  
        if (value != null) {  
            Empresa empresa = (Empresa) value;  
            return ""+empresa.getId();
        }  
        return "";  
  
    }
S

o problema, creio eu não seja o ID, até porquê, consigo pegar a partir de um clique o objeto e submetê-lo.
Porém, tenho problema como o valor que passo em string.

por exemplo, tentei digitar Drogaria, tive esse erro:

Caused by: java.lang.NumberFormatException: For input string: "DROGARIA "
	at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
	at java.lang.Integer.parseInt(Integer.java:492)
	at java.lang.Integer.valueOf(Integer.java:582)
	at com.portal.view.EntityConverter.getAsObject(EntityConverter.java:18)
	at org.primefaces.component.autocomplete.AutoCompleteRenderer.getConvertedValue(AutoCompleteRenderer.java:529)
Rodrigo_Sasaki

mas que valor está sendo enviado ao getAsObject quando a exceção é lançada?

Se for qualquer coisa que não seja um número, a exceção será lançada.

S

sim, de fato, este é meu problema, não sei como criá-lo de forma que possa receber uma String e um número.
preciso que a Strring possa ser passada ao método busca por Nome, e o ID para selecioná-lo.

Rodrigo_Sasaki

mas se a ideia é buscar pelo nome, por que você quer o Id? se tivesse o id seria mais fácil buscar por ele mesmo.

Porque não seta o nome retornado na sua empresa, e deixa o buscarPorNome() cuidar do resto?

S

a ideia seria esta, o.k., vou tentar fazer isso, então.
qualquer coisa, posto.

S

Seria isso?

package com.portal.view;

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

import com.portal.empresa.Empresa;
import com.portal.empresa.EmpresaRN;

@FacesConverter(value = "Converter")
public class EntityConverter implements Converter {

	@Override
	public Object getAsObject(FacesContext context, UIComponent component, String value) {
		if (value != null && value.trim().length() > 0) {
			String nome = String.valueOf(value);
			try {
				EmpresaRN empresaRN = new EmpresaRN();
				return empresaRN.buscaPorNome(nome);
			} catch (Exception e) {
				throw new ConverterException("N�o foi poss�vel encontrar a a empresa de c�digo" + value + "." + e.getMessage());
			}
		}
		return null;
	}

	@Override
	public String getAsString(FacesContext context, UIComponent component, Object value) {
		if (value != null) {
			Empresa empresa = (Empresa) value;
			return "" + empresa.getNome();
		}
		return "";

	}
}
Rodrigo_Sasaki

sim, a idéia é essa. Funcionou?

só um detalhe, não tem pra que fazer String nome = String.valueOf(value); value ja é uma String :slight_smile:

S

Continuou dando erro.

S

Me ensina, o que devo fazer?

S

Tem como você me ajudar agora, no converter?

Criado 28 de junho de 2012
Ultima resposta 3 de jul. de 2012
Respostas 11
Participantes 3