java-如何使用本地化的十进制分隔符将十进制值从JSP传递到Action?

在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使用特定语言环境的小数点分隔符,以便它能够正确转换浮点数?

解决方法:

When the value has decimal places (eg. 56,78), in the Action I get 5678.0

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

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

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

This is due to the fact that Struts2 is not aware that in my country , is the decimal separator, not the thousands separator.

如果Struts是在您运行的JVM中注册的语言环境,则它会知道您所在国家/地区的语言环境.有关更多信息,请参见Struts 2 (version 2.3.28) only accepts registered locales.浏览器隐式请求语言环境,该语言环境可能具有不同的语言环境,而不是OS默认语言环境,并且显式地通过request_locale参数(由i18n拦截器处理).参见Get user locale detected by i18n interceptor in action class.

Is there a way to instruct Struts2 to use the decimal separator of a specific Locale, so that it will be able to convert the floating numbers correctly?

Struts使用十进制格式来格式化和转换数字,这是本地化的.您需要做的就是将当前语言环境设置为Struts并根据该语言环境设置数字格式,然后再向用户显示数字或将其提交给操作.

上一篇:java-从Struts2中的堆栈中删除拦截器


下一篇:在Action的配置中,程序包路径不得以“ java”开头