【问题标题】:Why h:inputText doesn't use default locale for number conversion?为什么 h:inputText 不使用默认语言环境进行数字转换?
【发布时间】:2011-08-05 09:02:27
【问题描述】:

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

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

和电话

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

返回“de”。

但是,如果我将 &lt;f:convertNumber/&gt; 添加到我的 h:inputText 中,则会显示正确的十进制分隔符(例如 6,2 而不是 6.2)。

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

感谢您的帮助!

【问题讨论】:

    标签: jsf jsf-2 locale converter


    【解决方案1】:

    浮点数的默认格式是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 规范)将其强制转换为 double。

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

    【讨论】:

    • 好的,谢谢。我一直认为 numberConverter 会自动用于带有value="#{bean.someNumberType}" 的 inputText 字段
    猜你喜欢
    • 1970-01-01
    • 2014-03-09
    • 1970-01-01
    • 2017-08-05
    • 1970-01-01
    • 2020-04-05
    • 1970-01-01
    • 1970-01-01
    • 2011-10-29
    相关资源
    最近更新 更多