【问题标题】:How to pass a decimal value from JSP to Action with a Localized decimal separator?如何使用本地化小数分隔符将十进制值从 JSP 传递到 Action?
【发布时间】:2016-08-06 01:48:59
【问题描述】:

在 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 不知道在我的国家 , 是 decimal 分隔符,而不是 thousands 分隔符。

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

【问题讨论】:

    标签: java jsp struts2 decimal number-formatting


    【解决方案1】:

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

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

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

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

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

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

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

    Struts 使用十进制格式来格式化和转换数字,这是区域感知的。在向用户显示数字或将它们提交给操作之前,您只需将当前语言环境设置为 Struts 并根据该语言环境设置数字格式。

    【讨论】:

    • 所以现在的问题是,我如何才能在 Struts Action 中获得使用正确语言环境格式化的数字(?)——谢谢你对问题的解释,这似乎很常见我们 :) -- 无论如何,appserver (jboss6.3eap) 有一个虚拟机参数,其语言环境为 en_US,但我的浏览器使用的是西班牙语言环境,所以问题似乎在客户端:(
    • 这已经是不同的问题了,设置给动作的数字应该转换为属性类型。如果是float,则应转换为float。如果您不能使用请求的语言环境,您应该使用i18n 拦截器的参数,这将更新操作上下文。应该在将值设置为属性之前完成。
    • 好的,这很有帮助,我正在考虑将输入“numer”的语言环境更改为默认的 en(使用 jquery)或使用这个:stackoverflow.com/questions/29428888/…(在全局并格式化数字),谢谢解释,现在我必须找到一些解决方案:D
    • 默认为 en,我不确定 jQuery 会如何参与。您应该发布您尝试过的代码。实际上,您在当前状态下写的问题并不表明您有问题。您询问了 Struts2 如何使用小数分隔符来指定特定的语言环境并得到了答案。你还在看什么还不清楚。请澄清您的具体问题或添加其他详细信息以准确突出您的需求。
    • 好的,我的意思是使用 jquery 将小部件(可能是微调器)的语言环境设置为“en-EN”,因此显示带有点分隔符
    猜你喜欢
    • 2010-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-18
    相关资源
    最近更新 更多