JSF 1.2 + jboss-5.0.0.Beta4 (Tomcat 6.0.16) - Problemas virão!

Pessoal,

Estou utilizando jboss-5.0.0.Beta4 (Tomcat 6.0.16) e me deparei com o seguinte “problema”:

Os campos input que fazem referência para valores do tipo java.lang.Integer no meu bean.

Quando submetidos em branco o valor é convertido para zero. (O converter default para java.lang.Integer é o IntegerConverter do faces)

Procurei na internet e encontrei a explicação na especificação do javax.el.

1.18.3 Coerce A to Number type N

  • If A is null or “”, return 0.

Implementação da classe do Tomcat que faz a conversão.
http://www.javaresearch.org/source/jakarta/commons/el1.0/org/apache/commons/el/Coercions.java.html

E agora ? O que fazer quando o usuário não digirar nada e o Tomcat converter para ZERO ? Quando o usuário digitar ZERO quando vou saber se foi o javax.el que converteu ou o usuário que digitou ?

[]'s

Fred

Ué? Não entendi o fato de você citar o JBoss AS e o Tomcat na história (talvez você queria afugentar os especialistas em Weblogic ou Glassfish, sei lá), essa característica faz parte do Faces padrão.

Existem várias possibilidades para resolver seu “problema”:

:arrow: Se branco é um valor inválido e zero, válido; basta colocar no seu componente o atributo:

:arrow: Se tanto branco quanto zero forem inválidos; basta, como filho de h:inputText, colocar a validação:

:arrow: Se branco e zero forem válidos; use Integer (classe) ao invés de int (tipo primitivo) que, ao enviar branco, a sua variável estará como null.

É isso.

A espeficiação é do javax.el !!! Citei o Tomcat e o JBoss 5 beta 4 porque ambos ja estão implementando de acordo com a especificação.

No meu post está java.lang.Integer.

A característica não faz parte do faces padrão, o IntegerConverter retorna null se o valor for “” (branco).

O problema é que IntegerConverter retorna null e a implementação do javax.el seta ZERO. Entendeu ?

Anexei a aplicação, você pode testar usando tomcat 6.0.16 ou jboss 5 beta 4.

Alguem sabe se já corrigiram isto ?

Estou com o mesmo problema, já saiu a versão 5.1 e mesmo erro. Alguém conseguiu resolver?

Inclua esta linha no fim do seu “catalina.properties” a seguinte instrucao:
org.apache.el.parser.COERCE_TO_ZERO=false

catalina.properties é do tomcat 6.
Não encontrei esse arquivo no jboss 5

na verdade este aquivo está dentro da pasta conf do tomcat.

Esse problema ainda continua, tentei colocar no run.conf mas também não funciona.
Esse catalina.properties não existe mais no jboss 5.1

Problema resolvido, tem que inicializar com -Dorg.apache.el.parser.COERCE_TO_ZERO=false

dessa forma
run.bat -Dorg.apache.el.parser.COERCE_TO_ZERO=false

mesmo colocando dentro run.conf nao funciona, so na linha de comando

Ainda estou com um problema similar. Os campos “” (Vazio) não são convertidos para NULL, alguém encontrou uma solução ?.

Valeu,

Fred

Implementação do EL

public static String coerceToString (Object pValue, Logger pLogger) throws ELException { if (pValue == null) { return ""; } else if (pValue instanceof String) { return (String) pValue; } else { try { return pValue.toString (); } catch (Exception exc) { if (pLogger.isLoggingError ()) { pLogger.logError (Constants.TOSTRING_EXCEPTION, exc, pValue.getClass ().getName ()); } return ""; } } }

Ninguém na face da terra tem solução p/ isso???
Afinal é um bug do tomcat ou o quê???
Já pesquisei em todos locais possíveis…quem souber solução estou precisnado tb…

Tentei isso mas nada…ainda ves aspas e não null :frowning:

Valeu!!

Olá pessoal,

Alguém sabe se já existe correção para isso? Utilizo o Jboss 5.0.

Vlw

Bom Dia pessoal,

Como o tópico ainda não está fechado resolvi ajudar, se alguém precisar uma solução nesse http://www.guj.com.br/java/228436-jsf-seta-zero-para-valores-null-do-inputtext-resolvido existe uma bem legal.

flws

A solução está logo acima!

org.apache.el.parser.COERCE_TO_ZERO=false

Utilizo JBoss e funcionou.

Abraços