【问题标题】:JSTL formatNumber for JSP custom pattern independent from language独立于语言的 JSP 自定义模式的 JSTL formatNumber
【发布时间】:2015-12-04 13:54:07
【问题描述】:

我正在使用 JSP 开发一个小应用程序,我需要将欧洲应用程序转换为国际应用程序(与美国格式..等兼容)。我已经为标签 formatNumber here 创建了模式选项,但它始终取决于您的应用程序的语言环境。

示例 1:

我有一个语言环境en_US,格式编号是:

 <fmt:formatNumber pattern="#,##0.00" value="${number}"/>

结果: 15,463,536,640.00

示例 2:

我有一个语言环境 es_ES,格式编号是:

 <fmt:formatNumber pattern="#,##0.00" value="${number}"/>

结果: 15.463.536.640,00

它与语言环境有关的模式!我需要独立于应用程序区域设置使用逗号和点,因为并不总是希望使用区域设置格式来显示数字。

有什么帮助吗?

【问题讨论】:

  • 我不明白你想要什么。您想根据应用程序用户的区域设置数字格式,还是根据固定区域设置格式化数字,对应用程序的所有用户都相同?无论如何,您只需要设置适当的语言环境。
  • 是的,改变语言环境是解决办法。但我不想改变每一行的语言环境。我想直接放入一个模式并且它尊重逗号和点。

标签: java jsp jstl


【解决方案1】:

只需明确设置语言环境。

<!-- Page's own locale (you should already have that part). -->
<fmt:setLocale value="${user.locale}" />
<fmt:setBundle ... />

... text ...

<!-- Temporarily set to English, format number and then set back to page locale. -->
<fmt:setLocale value="en_US" />
<fmt:formatNumber ... />
<fmt:setLocale value="${user.locale}" />

另见:

【讨论】:

  • 谢谢 BalusC。我知道这个解决方案,但我一直在寻找更优雅的解决方案。可能我会做我自己的标签...
【解决方案2】:

在你自己的标签文件中:

  • 将语言环境设置为 en_US
  • 用您的图案打印所需的数字。
  • 恢复到旧语言环境。

标签文件如下:

<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>

<%@attribute name="number" description="The number to format and print." %>

<fmt:setLocale value="en_US"/>
<fmt:formatNumber pattern="#,##0.00" value="${number}"/>
<fmt:setLocale value="${user.locale}"/>

或者,如果您不想硬编码,您可以在输入参数中添加模式。

【讨论】:

    【解决方案3】:

    DecimalFormat

    DecimalFormat formatter = new DecimalFormat("###,###,###");
    

    【讨论】:

    • 这个答案有几个问题:1)&lt;fmt:formatNumber&gt; 已经在使用DecimalFormat 。 2)这个答案没有考虑到任何地方的具体问题。 3) 在 JSP 中编写 Java 代码是不好的做法。应该使用像 JSTL 这样的标记库。
    • 我的意思不是在 JSP 中使用 Java,也许我必须解释得更好,据我所知,他想以特定方式格式化数字,无论语言环境如何。为什么不在服务器上做呢?
    • DecimalFormat is 特定于区域设置,但您没有明确提及/解释这一点。您的代码的结果取决于系统默认语言环境。请仔细阅读我的回答中的“另见”链接。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-25
    • 2012-03-20
    • 1970-01-01
    • 2011-08-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多