如何使数字input区最初为空而不是0或0.00?
我有一个input的地方,应该得到一个数字。 我希望它显示为空。 但是,当我运行我的程序,我得到0或0.00作为默认值。 我怎样才能把它弄空?
如果将该值绑定到基元而不是其包装表示,则会发生这种情况。 基本int
总是默认为0
,而基元double
总是默认为0.0
。 你想要使用Integer
或Double
(或BigDecimal
)来代替。
例如:
public class Bean { private Integer number; // ... }
然后在处理表单提交时还有两件事要考虑。 首先,您需要指示JSF将空string提交的值解释为null
,否则EL仍将空string强制为0
或0.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参数来指示它不强制null
为0
或0.0
在Number
types的情况下)(它不直观Number
types就好像它们是原始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作为默认值。