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;
}
