如何使数字输入区域初始为空,而不是0或0.00?(How to make number input

2019-07-18 05:56发布

我有一个输入的地方,应该让一个数字。 我希望它显示为空。 然而,当我运行我的程序,我得到0或0.00为默认值。 我怎样才能使它空的?

Answer 1:

如果您绑定的价值本原,而不是它的包装表示这会发生。 原始int总是默认为0和原始double总是默认为0.0 。 你想用IntegerDouble (或BigDecimal )来代替。

例如:

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解析器盖下的任何服务器,那么你需要指示它不会把null00.0中的情况下, Number由以下VM参数类型(它unintuitively处理与Number类型,就好像它们是原语):

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

也可以看看:

  • 空字符串疯狂
  • H:这势必Integer属性的inputText正在提交值0而不是空的
  • H:这势必String属性的inputText被提交空字符串,而不是空的
  • javax.faces.INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL不会因为Java EE的7 / EL 3.0工作了


Answer 2:

我不给以前的答案不同意,但我想你可能会找

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



Answer 3:

您可以在primefaces扩展,而不是使用的inputText inputNumber。 像这样

<pe:inputNumber  />


Answer 4:

在您的XHTML代码,假设你有你的输入字段:

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

在您的Managed Bean的Action类,地图这一领域为:

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

   private String newName;
   ...

   // Add Getter & Setter Methods
   ... 
}

通过这样做,你不会得到0或0.00在你输入字段的默认值。



文章来源: How to make number input area initially empty instead of 0 or 0.00?