现象
今天工作上的一个小问题给我折腾了好久。
原来的代码是这样的,方便理解用中文代替。
<c:if test="${库存数量} > ${库存不足阈值}">
有货
</c:if>
<c:if test="${库存数量} <= ${库存不足阈值}">
还剩${库存数量}件
</c:if>
库存数量 | 库存不足阈值 | 期望显示 | 实际显示 |
---|---|---|---|
10 | 1 | 有货 | 有货 |
10 | 2 | 有货 | 还剩2件 |
10 | 3 | 有货 | 还剩3件 |
10 | 9 | 有货 | 还剩9件 |
10 | 10 | 还剩10件 | 还剩10件 |
10 | 11 | 还剩10件 | 还剩10件 |
原因
JSTL标签test条件判断时默认是将比较双方作为字符串进行比较的。而字符串的比较和数值的比较结果是不一样的,比如用字符串比较时 "10" 是小于 "2" 的。
解决
将比较双方任意一方强制转成数值类型即可。比如将某一边跟1相乘一下。
<c:if test="${库存数量} > ${库存不足阈值}*1">
有货
</c:if>
<c:if test="${库存数量} <= ${库存不足阈值}*1">
还剩${库存数量}件
</c:if>