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

我有一个input的地方,应该得到一个数字。 我希望它显示为空。 但是,当我运行我的程序,我得到0或0.00作为默认值。 我怎样才能把它弄空?

如果将该值绑定到基元而不是其包装表示,则会发生这种情况。 基本int总是默认为0 ,而基元double总是默认为0.0 。 你想要使用IntegerDouble (或BigDecimal )来代替。

例如:

 public class Bean { private Integer number; // ... } 

然后在处理表单提交时还有两件事要考虑。 首先,您需要指示JSF将空string提交的值解释为null ,否则EL仍将空string强制为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语法分析器的服务器,那么您需要通过以下VM参数来指示它不强制null00.0Numbertypes的情况下)(它不直观Numbertypes就好像它们是原始types一样):

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

也可以看看:

  • 空弦疯狂
  • h:绑定到Integer属性的inputText正在提交值0而不是null
  • h:绑定到String属性的inputText正在提交空string而不是null
  • 自Java EE 7 / EL 3.0以来,javax.faces.INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL不起作用

我不反对之前给出的答案,但我想你可能正在寻找

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

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

 <pe:inputNumber /> 

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

 <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 ... } 

通过这样做,您的input字段中不会得到0或0.00作为默认值。