迁移至Corretto 11环境后,<f:convertNumber>货币符号与值间输出 而非普通空格
迁移后
<f:convertNumber>货币符号与数值间非断行空格导致Excel导出问题 问题背景
- 原环境:64位Amazon Linux/3.4.21、Tomcat 8.5 + Java 8、Mojarra 2.2.20
- 新环境:64位Amazon Linux 2/4.3.0、Tomcat 8.5 + Corretto 11、Mojarra 2.2.20
- 异常现象:使用
<f:convertNumber>渲染货币格式时,新环境中货币符号与数值间输出 (示例:$ 100,00),旧环境则为普通空格,该差异导致Excel导出出现问题;其他字符串Bean变量的空格显示正常。
相关代码示例:
<h:outputText value="#{c.value}"> <f:convertNumber type="currency" locale="#{utilBean.user.myLocale}" /> </h:outputText>
解决方案
修改Tomcat的配置,强制输出普通空格:
方式1:修改catalina.properties
在Tomcat安装目录下的conf/catalina.properties文件中添加或更新以下配置项:
org.apache.el.parser.SKIP_IDENTIFIER_CHECK = true
方式2:添加JVM启动参数
在Tomcat的启动脚本(如catalina.sh)中,为JVM添加如下参数:
-Dorg.apache.el.parser.SKIP_IDENTIFIER_CHECK=true
原理说明
Corretto 11(Java 11)的EL解析器行为与Java 8存在差异,开启org.apache.el.parser.SKIP_IDENTIFIER_CHECK参数后,Tomcat的EL解析器会跳过对标识符的严格校验,避免将普通空格转换为非断行空格,从而让<f:convertNumber>输出的货币格式保持与旧环境一致的普通空格。
内容的提问来源于stack exchange,提问作者edudoda
相关产品推荐
相关产品推荐

