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

馋奶兔 提交于 2019-11-26 12:30:48
BalusC

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:

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+

You can use inputNumber in primefaces-extension instead of inputText. Like this

<pe:inputNumber  />

In your XHTML code, assume you have your input field as :

<h:inputText id="newname" value="#{youAction.newName}"
        style="width:130px" styleClass="form">
</h:inputText>

In your Managed Bean Action Class, map this field as :

@ManagedBean(name="yourAction")
public class YourAction {

   private String newName;
   ...

   // Add Getter & Setter Methods
   ... 
}

By doing in this way, you won't get 0 or 0.00 as default value in your input fields.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!