为什么h:inputText不使用默认语言环境进行数字转换?

时间:2011-04-14 09:09:14

标签: jsf jsf-2 locale converter

我有一些h:inpuText字段来保存数字。所有十进制值都以“。”显示。作为分隔符,虽然我在 faces-config.xml 中有以下条目:

<locale-config>
     <default-locale>de</default-locale>
</locale-config>

和电话

FacesContext.getCurrentInstance().getViewRoot().getLocale()

返回“de”。

但是,如果我向<f:convertNumber/>添加h:inputText,则会显示正确的小数分隔符(例如6,2而不是6.2)。

我是否必须将f:convertNumber添加到我的所有输入字段中,或者没有办法吗?

感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

默认格式是浮点数的toString格式。

考虑bean属性foo

public class MyBean implements Serializable {
  private double foo;
  public double getFoo() { return foo; }
  public void setFoo(double foo) { this.foo = foo; }
}

inputText对数字类型没有任何直接支持;它将被赋予一个对象(java.lang.Double)并在输出上调用toString。在表单提交上,浏览器发送String并且表达式语言根据其类型强制规则将其强制转换为双精度(参见EL规范)。

对于更复杂的逻辑,需要转换器。这是一个功能强大的模型,因为您可以转换为/从任何类型转换,而无需输入/输出控件来支持转换。