Home > Java > Dica JSF: Formulários com campos numéricos preenchidos com zero ao invés de null (Tomcat, JBoss)

Dica JSF: Formulários com campos numéricos preenchidos com zero ao invés de null (Tomcat, JBoss)

Problema

Se temos um formulário JSF com um campo número ou boolean opcional, quando o usuário fizer o submit do formulário os valores no controller vem preenchidos com zero ao invés de null. Esse comportamento também afeta os campos boolean, já que o valor vai para zero e seleciona uma opção do radio ou check box.

Mas então como posso ter valores null em um formulário sem que eles sejam automaticamente preenchidos com “” (string vazia) ou zeros?

Solução

Na verdade isso não é exatamente um problema, trata-se na verdade de um comportamento default chamado “coerce null values”. Para evitar problemas com variáveis primitivas do tipo int, o servidor de aplicação automaticamente preenche os valores null com zero ou vazio.

Mas se nossos controllers trabalham com os tipos corretos (Integer e etc) nos podemos lidar com valores null. Nesse caso temos que alterar uma configuração no servidor, a propriedade abaixo funciona para Tomcat  e JBoss:

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

Também é possível colocar um listener na sua aplicação, assim não precisa contar com a configuração do servidor. Crie um listener da seguinte maneira:

public class CoerceContextListener implements ServletContextListener {

@Override public void contextDestroyed(ServletContextEvent sce) { }

@Override public void contextInitialized(ServletContextEvent sce) { System.getProperties().put(“org.apache.el.parser.COERCE_TO_ZERO”, “false”);

}

}

Depois registra-lo no web.xml

<listener>

<listener-class>meu.pacote.MyServletContextListener</listener-class>

</listener>

Pronto problema resolvido, agora são valores vazio vão ficar null!

Categories: Java Tags: , , , ,
  1. No comments yet.
  1. No trackbacks yet.

Leave a comment