JSF - Converter - zero em vez de null

7 respostas
L

Olá,

estou passando trabalho com um converter no JSF.
Tenho uma tela de teste que uso para persistir um objeto de uma classe Carro, com atributos nome (String) e ano (Integer).
Fiz (copiei da net) um converter para o ano:

public class EmptyToNullConverter implements Converter {

    public Object getAsObject(FacesContext facesContext, UIComponent component, String value) {
        if (value == null || value.trim().length() == 0) {
            if (component instanceof EditableValueHolder) {
                ((EditableValueHolder) component).setSubmittedValue(null);
            }
            return null;
        }
        return value;
    }

    public String getAsString(FacesContext facesContext, UIComponent component, Object value) {
    	return value == null ? null : value.toString();
    }	

}

O problema é o seguinte. Quando quero inserir um novo Carro, mostro meu formulário com 2 inputtext e instancio um objeto carro.
Este objeto é iniciado com ano=null.
Acontece que, na tela, o input text do ano aparece com o texto “0” zero, em vez de vir vazio.
Debuguei e vi que no método getAsString do converter, o parâmetro value já vem com o valor zero, em vez de nulo, como iniciado no objeto.
Antes que me perguntem, já coloquei a linha

-Dorg.apache.el.parser.COERCE_TO_ZERO=false

lá no meu tomcat.
Resolveu pro método getAsObject, mas o getAsString continua dando trabalho.
Em algum lugar que eu não faço idéia, o valor null do atributo ano do carro está sendo convertido pra zero.
Alguma dica?
Muito obrigado!

7 Respostas

W

Tive um problema parecido. Além do lance do bug no Tomcat, se não me engano tem um
bug no próprio JSF. Sugiro que vc faça o seguinte: teste a variavel ano: no getAsString,
se value == null, retorna “”, e no getAsObject, se value == “” ou value == null, retorna null.

Flws

L

weiseleiter,

o problema é que no método getAsString, o parâmetro value já vem preenchido com o valor zero em vez de null.
Não tenho o que fazer dentro do método.
Eu teria que descobrir onde é chamado o método getAsString, para poder alterar esta conversão incorreta de null para zero.

L

Outra dica que encontrei foi definir o atributo “required” do componente HtmlInputText como “false”, mas também não adiantou.

L

Este me parece ser um poblema muito básico, afinal, qual é a tela de cadastro que não tem um campo numérico?
Ninguém nunca enfrentou a mesma situação?
Qual foi a solução dada?
Obrigado, e me desculpem pela insistência.

A

Também tive esse problema e deu bastante trabalho para resolver… Mas eu tive o problema no jboss 5.1, resolvi da seguinte forma:

Edite o arquivo \jboss-5.1.0.GA\server\default\deploy\properties-service.xml e insira a tag:

org.apache.el.parser.COERCE_TO_ZERO=false

dentro da tag:

Acho que esse arquivo não tem dentro do tomcat, mas talvez você encontre algum similar.

A

Era isso que eu estava precisado!

Funciona direitinho!

Valeu amigo!

A

Pessoal estou com o mesmo problemas, agora no JBoss 6.

No 5.1 funcinou perfeitamente,porém, no 6 não está funcionando.

Alguém sabe o que pode ser?

Criado 14 de outubro de 2009
Ultima resposta 19 de jan. de 2012
Respostas 7
Participantes 4