我有一个输入位置,应该得到一个数字。我希望它显示为空。但是,当我运行程序时,默认得到 0 或 0.00。怎么才能把它清空呢?
最佳答案
如果您将值绑定(bind)到原语而不是其包装表示,就会发生这种情况。基元 int
始终默认为 0
,基元 double
始终默认为 0.0
。您想使用Integer
或Double
(或BigDecimal
)来代替。
例如:
public class Bean {
private Integer number;
// ...
}
那么在处理表单提交时还有两件事需要考虑。首先,您需要指示 JSF 将提交的空字符串值解释为 null
,否则 EL 仍会将空字符串强制为 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 解析器的服务器,那么您需要指示它不要将 null
强制为 0
或 0.0
如果是 Number
类型,则通过以下 VM 参数(它不直观地处理 Number
类型,就好像它们是基元一样):
-Dorg.apache.el.parser.COERCE_TO_ZERO=false
另请参阅:
- The empty string madness
- h:inputText which is bound to Integer property is submitting value 0 instead of null
- h:inputText which is bound to String property is submitting empty string instead of null
- javax.faces.INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL does not work anymore since Java EE 7 / EL 3.0
关于jsf - 如何使数字输入区域最初为空而不是0或0.00?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14334188/