【问题标题】:fmt formatNumber type="currency" shows "¤" instead of actual currency symbolfmt formatNumber type="currency" 显示 "¤" 而不是实际的货币符号
【发布时间】:2016-03-01 14:37:59
【问题描述】:

我有以下代码将金额显示为货币:

<fmt:formatNumber type="currency" value="${camp.montoTotal}"/>

当我在 Eclipse 中运行应用程序时(实际上我使用的是 STS),它看起来不错:“$500”。 但是当我将 WAR 文件部署到服务器时(在 Ubuntu LTS 14.04 上使用 Tomcat8),它显示“¤500”,即显示通用货币标记而不是实际符号。我试图通过以下方式强制语言环境:

<META http-equiv="Content-Language" content="es-AR">
<fmt:setLocale value="es-AR"/>

但结果相同。为什么会这样?

【问题讨论】:

  • 我发现了一些奇怪的东西:这个问题只发生在 Chrome 上!如果我使用 IE 或 Edge,它会正确显示 $ 符号。此外,如果我从 localhost 中的 Eclipse 服务器提供的 Chrome、IE 或 Edge 浏览该站点,它工作正常。失败的组合是 Tomcat 远程服务器 + Chrome。在智能手机上尝试了 Chrome,但也失败了。

标签: spring jstl currency-formatting


【解决方案1】:

我终于找到答案了!!

最初我在 app-config xml 中配置了 messageSource bean。当我将它移到 applicationContext xml 时,问题就解决了。我必须这样做,因为我在尝试使用 getMessage 函数访问控制器中的消息属性时也遇到了问题。

  <bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
       <property name="basename" value="messages"/>
  </bean>

结论:messageSource必须在应用上下文中配置,而不是在根配置xml中。

【讨论】:

    【解决方案2】:

    首先,需要导入标签库:

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

    接下来,用 setLocale

    设置国家
    <fmt:setLocale value="es-AR"/>
    

    然后你可以用 formatNumber 标签来格式化数字

    <fmt:formatNumber value="${camp.montoTotal}" type="currency" currencySymbol="$"/>
    

    您可以在属性中添加您要使用的currencySymbol

    希望对您有所帮助。 问候,

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-16
      • 1970-01-01
      • 1970-01-01
      • 2012-02-22
      • 1970-01-01
      相关资源
      最近更新 更多