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

PrimeFaces 12 DataExporter导出XLS小数格式异常问题求助

PrimeFaces 12 DataExporter导出XLS小数格式错误解决方案

升级PrimeFaces 12后,使用DataExporter导出XLS文件时出现小数格式异常,例如50.00被显示为5,000。本地Win10环境问题已解决,但服务器端仍存在该问题,可尝试以下方案:

问题根源

该异常本质是千位分隔符与小数点符号混淆:pt-BR locale下,小数点应为逗号(,),千位分隔符为点(.),但服务器端可能因Locale配置缺失、DecimalFormat初始化未指定Locale,导致格式解析逻辑错误。

具体修复步骤

  • 显式指定DecimalFormat的Locale符号
    避免依赖服务器默认Locale,手动配置pt-BR的格式符号,确保格式规则统一:

    @PostConstruct
    public void init() {
        excelOpt = new ExcelOptions();
    
        // 保留原有样式配置
        excelOpt.setFacetBgColor("#F88017");
        excelOpt.setFacetFontSize("10");
        excelOpt.setFacetFontColor("#0000ff");
        excelOpt.setFacetFontStyle("BOLD");
        excelOpt.setCellFontColor("#00ff00");
        excelOpt.setCellFontSize("8");
        excelOpt.setStronglyTypedCells(true);
    
        // 修正数字格式:显式定义pt-BR的分隔符
        DecimalFormatSymbols brSymbols = new DecimalFormatSymbols(new Locale("pt", "BR"));
        brSymbols.setDecimalSeparator(',');
        brSymbols.setGroupingSeparator('.');
        DecimalFormat numberFormat = new DecimalFormat("#,##0.00", brSymbols);
        excelOpt.setNumberFormat(numberFormat);
    
        // 货币格式保持显式Locale初始化
        excelOpt.setCurrencyFormat((DecimalFormat) DecimalFormat.getCurrencyInstance(new Locale("pt", "BR")));
    }
    
  • 确保服务器端Locale支持

    • 若服务器为Linux系统,需安装pt-BR语言包(以Ubuntu为例):
      sudo apt-get install language-pack-pt
      sudo locale-gen pt_BR.UTF-8
      
    • 可在JVM启动参数中强制指定默认Locale,避免服务器全局Locale影响:
      -Duser.language=pt -Duser.region=BR
      
  • 验证数据类型一致性
    确认totalGeral字段为Number类型(如BigDecimal、Double),而非字符串类型。setStronglyTypedCells(true)会基于数据类型导出,若字段为字符串则会直接按文本处理,导致格式配置失效。

  • 移除页面端冗余转换(可选)
    页面中<f:convertNumber>仅负责前端显示,不影响导出逻辑,若已通过ExcelOptions统一配置导出格式,可考虑移除该转换,避免潜在冲突:

    <!-- 移除<f:convertNumber>,导出格式由ExcelOptions控制 -->
    <h:outputText value="#{ordemServico.totalGeral}" />
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 01:35:23