1.发现问题
数据库表有2个 int 类型字段,现在需要合并2个字段保留2位小数显示。
之前只展示一个字段的时候,我们的做法如下:
当 A = 50 页面显示结果 0.50
现在查询的时候 将2个int 字段 合并查询以 select (A+B) as C 方式 :
当 C = 50 页面显示结果 1.00
2.定位问题
将后台值直接在页面返回,显示没错:
通过在页面直接返回:
${C}
当 C = 50 没错
直接在JSP页面上手动赋值,正常显示:
%
Integer A = 50;
request.setAttribute("A", A);
%>
页面显示 0.50
手动赋值没问题,首先排除问题fmt 格式化问题,因为一直都是这么格式化。
项目其他都没改,只是在SQL中合并了2个字段返回,开始猜想应该是合并返回的导致的问题。
立马调试代码,项目技术使用: SpringBoot + JPA ,查询结果未做转化,直接返回前端
通过调试基本确定问题原因 :数据库中2个int 字段累加返回 在java中自动会变为 BigInteger.
进一步确认问题,手动在页面进行测试:
BigInteger A = BigInteger.valueOf(50);
request.setAttribute("A", A);
%>
页面显示 1.00
显示结果有误,问题完全定位。
3. 跟踪EL表达式源码,进一步了解问题原因
通过在tomcat/lib 下 el 依赖包抽取几个核心类: