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?
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