Erro em converter com JSF
Estou seguindo o curso do Dyego, e cheguei num ponto que ferrou....
Crirei um converter e quando tento salvar dá o erro:
Validation Error: Value is not valid
O código do converter está abaixo:
[]s
Marlon
Crirei um converter e quando tento salvar dá o erro:
Validation Error: Value is not valid
O código do converter está abaixo:
package mtsys.converter;
import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
import mtsys.dao.TiposDocumentosDAO;
import mtsys.db.TiposDocumentos;
/**
*
* @author Marlon Tiedt
*/
public class TipoDocumentosConverter implements Converter {
private TiposDocumentosDAO TipoDocDAO = new TiposDocumentosDAO();
public TipoDocumentosConverter(){
}
@Override
public Object getAsObject(FacesContext context, UIComponent component, String value) {
Integer code = Integer.parseInt(value);
try {
return TipoDocDAO.getbyID(code);
} catch (ClassNotFoundException ex) {
Logger.getLogger(TipoDocumentosConverter.class.getName()).log(Level.SEVERE, null, ex);
} catch (SQLException ex) {
Logger.getLogger(TipoDocumentosConverter.class.getName()).log(Level.SEVERE, null, ex);
}
return null;
}
@Override
public String getAsString(FacesContext context, UIComponent component, Object value) {
TiposDocumentos TipoDoc = (TiposDocumentos)value;
return String.valueOf(TipoDoc.getTipoID());
}
}
[]s
Marlon
Marlon Tiedt
Curtidas 0
Respostas
Davi Costa
19/09/2010
Marlon,
logo de cara percebi
que vc no método public String getAsString(...) está retornando o Id em forma de String
será que nessa entidade não tem nenhum valor como nome ou descrição, você pode retornar eles sim.
Depois olha com calma na internet que vc vai achar implementações para converters genéricos,
isso mesmo pode acreditar, vc vai encontrar classes que servem para todos genéricos, para não ter que manter vários genéricos. Eu inclusive tenho uma aqui, mas é um pouco grande para te postar aqui.
Mas de repente se depois vc quiser posso te passar por email.
Outra coisa confere na entidade se existe o equals e o hashcode.
Espero ter ajudado.
Att Davi
logo de cara percebi
que vc no método public String getAsString(...) está retornando o Id em forma de String
será que nessa entidade não tem nenhum valor como nome ou descrição, você pode retornar eles sim.
Depois olha com calma na internet que vc vai achar implementações para converters genéricos,
isso mesmo pode acreditar, vc vai encontrar classes que servem para todos genéricos, para não ter que manter vários genéricos. Eu inclusive tenho uma aqui, mas é um pouco grande para te postar aqui.
Mas de repente se depois vc quiser posso te passar por email.
Outra coisa confere na entidade se existe o equals e o hashcode.
Espero ter ajudado.
Att Davi
GOSTEI 0
Marlon Tiedt
19/09/2010
Valeu pela resposta....
Mas como estou iniciando em Java, entendi o que você falou, mas não sei aonde procurar o problema...
Poderia passar um pouco mais detalhado?
[]s
Marlon
Mas como estou iniciando em Java, entendi o que você falou, mas não sei aonde procurar o problema...
Poderia passar um pouco mais detalhado?
[]s
Marlon
GOSTEI 0
Davi Costa
19/09/2010
É o seguinte no teu faces-config vc só declarará um converter, e sempre que nas suas páginas
precisar de um converter vc sempre chamará ele. Pode acreditar que funciona, mas para achar essa implementação genérica de qualquer entidade você vai ter que pesquisar um pouco. Não me lembro onde achei, mas acho que se vc colocar no google algo como converter genérico vc já deva encontrar algo.
Enquanto ao equals e o hashCode com sua implementação do jeito que está aí tenta ver se suas entidades sobrescrevem esses métodos, pois é preciso. Verifica se não tiver coloca apontando para o atributo id e testa ai.
De qualquer forma tenta achar essa implementação genérica de converter, além dela ser uma classe extensa, não tenho ela aqui no meu trabalho, caso vc não ache até a noite ou até amanhã, avisa que vejo se coloco aqui.
Att Davi
precisar de um converter vc sempre chamará ele. Pode acreditar que funciona, mas para achar essa implementação genérica de qualquer entidade você vai ter que pesquisar um pouco. Não me lembro onde achei, mas acho que se vc colocar no google algo como converter genérico vc já deva encontrar algo.
Enquanto ao equals e o hashCode com sua implementação do jeito que está aí tenta ver se suas entidades sobrescrevem esses métodos, pois é preciso. Verifica se não tiver coloca apontando para o atributo id e testa ai.
De qualquer forma tenta achar essa implementação genérica de converter, além dela ser uma classe extensa, não tenho ela aqui no meu trabalho, caso vc não ache até a noite ou até amanhã, avisa que vejo se coloco aqui.
Att Davi
GOSTEI 0
Marlon Tiedt
19/09/2010
Acho que você achou o converter genérico neste site:
http://www.rponte.com.br/2008/07/26/entity-converters-pra-da-e-vender/
Mas existe uma outra maneira de usar o selectOneMenu sem carregar o obejto inteiro?
Nãp posso fazer algo deste jeito?
Você poderia passar um exemplo de equals e o hashCode?
[]s
Marlon
http://www.rponte.com.br/2008/07/26/entity-converters-pra-da-e-vender/
Mas existe uma outra maneira de usar o selectOneMenu sem carregar o obejto inteiro?
Nãp posso fazer algo deste jeito?
public List<SelectItem> getTipoDocs() throws SQLException, ClassNotFoundException {
List<SelectItem> toReturn = new LinkedList<SelectItem>();
for (TiposDocumentos tipodoc : TipoDocDAO.getAllTiposDocumentos()) {
toReturn.add(new SelectItem(tipodoc.getTipoID(), tipodoc.getDescricao()));
}
return toReturn;
}
Você poderia passar um exemplo de equals e o hashCode?
[]s
Marlon
GOSTEI 0
Davi Costa
19/09/2010
Pode sim,
mas vc ainda vai precisar de um converter.
Quase todas as ide's geram automaticamente o equals e o hashCode,
é só pesquisar na sua IDE as teclas de atalho, elas vão gerar o equals e o hash e vão perguntar que atributo
vc quer utilizar para comparar suas entidades.
Att Davi
Quase todas as ide's geram automaticamente o equals e o hashCode,
é só pesquisar na sua IDE as teclas de atalho, elas vão gerar o equals e o hash e vão perguntar que atributo
vc quer utilizar para comparar suas entidades.
Att Davi
GOSTEI 0
Dyego Carmo
19/09/2010
Opa , conseguiu resolver ?
GOSTEI 0
Marlon Tiedt
19/09/2010
Sim Dyego.
Tive que fazer o seguinte na classe de origem, implementar o equals e hashCode na classe.
O próximo passo é colocar o super-converter do Rafael Pontes que tem aqui....
http://www.rponte.com.br/2008/07/26/entity-converters-pra-da-e-vender/
Valeu a todos...
[]s
Marlon
Tive que fazer o seguinte na classe de origem, implementar o equals e hashCode na classe.
@Override
public boolean equals(Object obj) {
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
final TiposDocumentos other = (TiposDocumentos) obj;
if (this.TipoID != other.TipoID) {
return false;
}
return true;
}
@Override
public int hashCode() {
int hash = 7;
hash = 47 * hash + this.TipoID;
return hash;
}
O próximo passo é colocar o super-converter do Rafael Pontes que tem aqui....
http://www.rponte.com.br/2008/07/26/entity-converters-pra-da-e-vender/
Valeu a todos...
[]s
Marlon
GOSTEI 0