我有一个应该得到一个数字的输入位置。我希望它显示为空。但是,当我运行我的程序时,我得到 0 或 0.00 作为默认值。我怎样才能让它为空?
问问题
11217 次
4 回答
21
如果您将值绑定到原语而不是其包装表示,则会发生这种情况。原语int
始终默认为0
并且原语double
始终默认为0.0
。您想使用Integer
or Double
(or BigDecimal
) 代替。
例如:
public class Bean {
private Integer number;
// ...
}
然后在处理表单提交时还有两件事需要考虑。首先,您需要指示 JSF 将提交的空字符串值解释为null
,否则 EL 仍会将空字符串强制为0
or 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
(它不直观地处理Number
类型,好像它们是原语):
-Dorg.apache.el.parser.COERCE_TO_ZERO=false
也可以看看:
于 2013-01-15T11:13:14.897 回答
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+
于 2016-11-27T04:20:17.433 回答
0
您可以在 primefaces-extension 中使用 inputNumber 而不是 inputText。像这样
<pe:inputNumber />
于 2017-02-15T13:40:56.580 回答
-5
在您的 XHTML 代码中,假设您的输入字段为:
<h:inputText id="newname" value="#{youAction.newName}"
style="width:130px" styleClass="form">
</h:inputText>
在您的托管 Bean 操作类中,将此字段映射为:
@ManagedBean(name="yourAction")
public class YourAction {
private String newName;
...
// Add Getter & Setter Methods
...
}
通过这种方式,您将不会在输入字段中获得 0 或 0.00 作为默认值。
于 2013-01-15T09:28:38.407 回答