我有一个输入的地方,应该让一个数字。 我希望它显示为空。 然而,当我运行我的程序,我得到0或0.00为默认值。 我怎样才能使它空的?
Answer 1:
如果您绑定的价值本原,而不是它的包装表示这会发生。 原始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参数类型(它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?