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

11,183

Solution 1

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:

Solution 2

I don't disagree with previous answers given, but I think you might be looking for

<h:inputText id="number" binding="#{controller.inputBox}" value="#{controller.number}" >
     <f:event type="preRenderComponent" listener="#{controller.preRenderInput}" />
</h:inputText>

and inside the controller

private double number; // getters and setters
private UIInput inputBox; // getters and setters
public void preRenderInput() {
        // if it is the first request
        if(!FacesContext.getCurrentInstance().isPostback()) {
            inputBox.setValue("");
        }
}

JSF 2.0+

Share:
11,183
Gary Leather
Author by

Gary Leather

Updated on July 24, 2022

Comments

  • Gary Leather
    Gary Leather almost 2 years

    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?

  • Gary Leather
    Gary Leather over 11 years
    my question is about numeric values, I do not have any problem with strings. But I still have the problem for integers and doubles.
  • Venkat
    Venkat over 11 years
    @GaryLeather - When you want to make use of the value, why don't you convert the value to the type you want.
  • Erick
    Erick over 5 years
    Hi @BalusC, what file do I need to add the VM argument to and where is it located?
  • BalusC
    BalusC over 5 years
    @Erick: It needs to go in the java launch command of the server. It's not necessarily in a file and depends on how you're launching the server.