Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to make number input area initially empty instead of 0 or 0.00?

I have an input place that should get a number. I want it to be displayed as empty. However when I run my program, I get 0 or 0.00 as default. How can I make it empty?

like image 372
Gary Leather Avatar asked Jan 15 '13 09:01

Gary Leather


1 Answers

This will happen if you bound the value to a primitive instead of its wrapper representation. The primitive int always defaults to 0 and the primitive double always defaults to 0.0. You want to use Integer or Double (or BigDecimal) instead.

E.g.:

public class Bean {

    private Integer number;

    // ...
}

Then there are two more things to take into account when processing the form submit. First, you need to instruct JSF to interpret empty string submitted values as null, otherwise EL will still coerce the empty string to 0 or 0.0. This can be done via the following context parameter in web.xml:

<context-param>
    <param-name>javax.faces.INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL</param-name>
    <param-value>true</param-value>
</context-param>

Second, if you're using Tomcat/JBoss or any server which uses Apache EL parser under the covers, then you need to instruct it to not coerce null to 0 or 0.0 in case of Number types by the following VM argument (it's unintuitively dealing with Number types as if they are primitives):

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

See also:

  • The empty string madness
  • h:inputText which is bound to Integer property is submitting value 0 instead of null
  • h:inputText which is bound to String property is submitting empty string instead of null
  • javax.faces.INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL does not work anymore since Java EE 7 / EL 3.0
like image 180
BalusC Avatar answered Sep 28 '22 16:09

BalusC