Fórum Erro em converter com JSF #386675
19/09/2010
0
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
Curtir tópico
+ 0Posts
20/09/2010
Davi Costa
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
20/09/2010
Marlon Tiedt
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
20/09/2010
Davi Costa
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
20/09/2010
Marlon Tiedt
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
20/09/2010
Davi Costa
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
21/09/2010
Dyego Carmo
Gostei + 0
21/09/2010
Marlon Tiedt
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
Clique aqui para fazer login e interagir na Comunidade :)