You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

XHTML中convertNumber标签locale属性在Tomcat中失效求助

问题描述

使用PrimeFaces构建UI,表格内有一列美元货币数据,预期负数金额显示为($数值)格式(例如-0.85显示为($0.85))。通过<f:convertNumber>的locale="en-US"配置,在JBoss环境中正常生效,但迁移到Tomcat后,负数显示为-$0.87,不符合预期。相关代码如下:

<p:column exportable="true">
  <f:facet name="header">
    <h:outputLabel value="Difference" />
  </f:facet>
  <h:outputText value="#{CurrencyVar.Amt}"
  style="float:right;">
    <f:convertNumber type="currency" locale="en-US"
    maxFractionDigits="2" />
  </h:outputText>
</p:column>
解决方法
  • 显式指定货币格式模式:Tomcat默认Locale数据可能未完全遵循en-US的负数货币格式,直接在<f:convertNumber>中添加pattern属性强制定义格式:

    <f:convertNumber type="currency" locale="en-US" maxFractionDigits="2" pattern="¤#,##0.00;(¤#,##0.00)" />
    

    其中(¤#,##0.00)部分定义负数显示规则,¤会自动替换为对应Locale的货币符号(en-US下为$)。

  • 修正Tomcat的JVM Locale配置:确保Tomcat的JVM启动参数设置了正确的US Locale,在catalina.sh(Linux/Mac)或catalina.bat(Windows)中添加:

    # Linux/Mac
    JAVA_OPTS="$JAVA_OPTS -Duser.language=en -Duser.region=US"
    
    # Windows
    set JAVA_OPTS=%JAVA_OPTS% -Duser.language=en -Duser.region=US
    

    重启Tomcat后生效,保证JVM层面Locale与页面配置一致。

  • 自定义PrimeFaces货币转换器:若上述方法无效,可自定义转换器手动处理负数格式:

    @FacesConverter("customCurrencyConverter")
    public class CustomCurrencyConverter extends CurrencyConverter {
        @Override
        public String getAsString(FacesContext context, UIComponent component, Object value) {
            String original = super.getAsString(context, component, value);
            if (value instanceof Number && ((Number) value).doubleValue() < 0) {
                return original.replace("-$", "($").concat(")");
            }
            return original;
        }
    }
    

    页面中使用该自定义转换器:

    <h:outputText value="#{CurrencyVar.Amt}" style="float:right;">
      <f:converter converterId="customCurrencyConverter" />
      <f:attribute name="locale" value="en-US" />
      <f:attribute name="maxFractionDigits" value="2" />
    </h:outputText>
    

内容的提问来源于stack exchange,提问作者Deepu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 00:07:12