如何使用本地化小数分隔符将JSP中的十进制值传递给Action?

时间:2016-04-14 13:14:22

标签: java jsp struts2 decimal number-formatting

在JSP中:

<input type = "number" 
       name = "score" 
        min = "0" 
        max = "100" 
  maxlength = "3"
       step = "0.01" />

在行动中:

@Getter @Setter private Float score; 

当值具有小数位数(例如56,78)时,在动作中我得到5678.0

这是因为Struts2不知道我所在的国家/地区,十进制分隔符,而不是千位分隔符。

有没有办法指示Struts2使用特定Locale 的小数分隔符,以便它能够正确转换浮点数?

1 个答案:

答案 0 :(得分:3)

  

当值有小数位(例如56,78)时,在Action I得到5678.0

这是因为使用默认语言环境转换了值。 AFAIK Struts2类型转换可识别区域设置,您可以按照本地化指南为资源包中的每个区域设置定义特定格式。

您可以从defining formats开始查看资源包中的数字。看起来数字格式对于不同的区域设置是相同的。特定的语言环境包含自己的十进制格式符号,因此数字的格式化输出仅取决于Struts在为输出格式化值或将类型转换回数字时使用的当前语言环境。

Struts2将当前语言环境保留在操作上下文中,并将其存储在会话中,以使用新请求设置操作上下文。

  

这是因为Struts2不知道在我的国家,是小数点分隔符,而不是千位分隔符。

Struts知道您所在国家/地区的区域设置是否在您运行的JVM中注册了区域设置。有关它的更多信息,请参见Struts 2 (version 2.3.28) only accepts registered locales。浏览器隐式请求语言环境,它可能具有不同的语言环境而不是OS默认语言环境,并且通过MS-CHAP参数明确地通过request_locale拦截器处理。请参阅Get user locale detected by i18n interceptor in action class

  

有没有办法指示Struts2使用特定i18n的小数分隔符,以便它能够正确转换浮点数?

Struts使用十进制格式来格式化和转换数字,这是区域设置感知的。您只需将当前区域设置设置为Struts并根据此区域设置格式化数字,然后再向用户显示数字或将其提交给操作。