现象

今天工作上的一个小问题给我折腾了好久。
原来的代码是这样的,方便理解用中文代替。

<c:if test="${库存数量} > ${库存不足阈值}">
    有货
</c:if>
<c:if test="${库存数量} <= ${库存不足阈值}">
    还剩${库存数量}件
</c:if>
库存数量库存不足阈值期望显示实际显示
101有货有货
102有货还剩2件
103有货还剩3件
109有货还剩9件
1010还剩10件还剩10件
1011还剩10件还剩10件

原因

JSTL标签test条件判断时默认是将比较双方作为字符串进行比较的。而字符串的比较和数值的比较结果是不一样的,比如用字符串比较时 "10" 是小于 "2" 的。

解决

将比较双方任意一方强制转成数值类型即可。比如将某一边跟1相乘一下。

<c:if test="${库存数量} > ${库存不足阈值}*1">
    有货
</c:if>
<c:if test="${库存数量} <= ${库存不足阈值}*1">
    还剩${库存数量}件
</c:if>
Last modification:July 17, 2020
If you think my article is useful to you, please feel free to appreciate