GARANTIR DESCONTO

Fórum Erro em converter com JSF #386675

19/09/2010

0

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:

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

Marlon Tiedt

Responder

Posts

20/09/2010

Davi Costa

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
Responder

Gostei + 0

20/09/2010

Marlon Tiedt

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
Responder

Gostei + 0

20/09/2010

Davi Costa

É 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
Responder

Gostei + 0

20/09/2010

Marlon Tiedt

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?

    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
Responder

Gostei + 0

20/09/2010

Davi Costa

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
Responder

Gostei + 0

21/09/2010

Dyego Carmo

Opa , conseguiu resolver ?
Responder

Gostei + 0

21/09/2010

Marlon Tiedt

Sim Dyego.

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
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar