JSF - Converter - zero em vez de null

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!

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

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.

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

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.

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.

Era isso que eu estava precisado!

Funciona direitinho!

Valeu amigo!

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?