在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
的小数分隔符,以便它能够正确转换浮点数?
答案 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并根据此区域设置格式化数字,然后再向用户显示数字或将其提交给操作。