如何使数字输入区域最初为空而不是0或0.00?

时间:2013-01-15 09:02:17

标签: jsf input numbers zero

我有一个输入位置应该得到一个数字。我希望它显示为空。但是,当我运行我的程序时,我默认为0或0.00。我怎么能把它弄空?

4 个答案:

答案 0 :(得分:19)

如果将值绑定到基元而不是其包装表示,则会发生这种情况。原始int始终默认为0,原始double始终默认为0.0。您想要使用IntegerDouble(或BigDecimal)。

E.g:

public class Bean {

    private Integer number;

    // ...
}

在处理表单提交时,还有两件事需要考虑。首先,您需要指示JSF将空字符串提交的值解释为null,否则EL仍会将空字符串强制转换为00.0。这可以通过web.xml中的以下上下文参数来完成:

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

其次,如果您正在使用Tomcat / JBoss或任何使用Apache EL解析器的服务器,那么您需要指示它不强制null0或{{1}在0.0类型的情况下,通过以下VM参数(它不直观地处理Number类型,就好像它们是原语一样):

Number

另见:

答案 1 :(得分:1)

我不同意以前给出的答案,但我认为你可能在寻找

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

并在控制器内部

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 +

答案 2 :(得分:0)

您可以在primefaces-extension而不是inputText中使用inputNumber。 喜欢这个

<pe:inputNumber  />

答案 3 :(得分:-5)

在您的XHTML代码中,假设您的输入字段为:

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

在Managed Bean Action Class中,将此字段映射为:

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

   private String newName;
   ...

   // Add Getter & Setter Methods
   ... 
}

通过这种方式,您不会在输入字段中获得0或0.00作为默认值。