比较EL表达式中的数字似乎不起作用

时间:2011-08-23 16:46:28

标签: jsp if-statement jstl el

在JSP中,我想比较两个变量

如果我这样做:

<c:set var="pagerTotDisp" value="9"/>
<c:if test="${pagerTotDisp > 8}">
  <span>pagerTotDisp above 8</span>
</c:if>

按预期显示“pagerTotDisp 8以上”

<c:set var="TotalPages" value="10"/>
<c:if test="${TotalPages > 2}">
  <span>TotalPages above 2</span>
</c:if>

按预期显示“pagerTotDisp 8以上”

但是如果我这样做

<c:set var="pagerTotDisp" value="9"/>
<c:set var="TotalPages" value="10"/>
<c:if test="${TotalPages < pagerTotDisp}">
  <span>This condition is not true. This text should not be displayed</span>
</c:if>

显示“此条件不成立。不应显示此文本”。

发生了什么事? 该JSP无法在同一条件下处理两个变量吗?

感谢

2 个答案:

答案 0 :(得分:10)

您正在对value的{​​{1}}属性中的值进行硬编码。 <c:set>将硬编码值视为<c:set>。因此EL也将它们评估为String。按字典顺序,String大于9,因为10位于比9更远的数字位置。

有两种方法可以解决这个问题:

  1. 通过EL表达式设置值。它将被解释为1而不是Long

    String
  2. 或者,使用<fmt:parseNumber>,如果您有来自其他地方的<c:set var="pagerTotDisp" value="${9}" /> <c:set var="TotalPages" value="${10}" /> 变量,那么这将是您唯一无法控制的解决方案。

    String

答案 1 :(得分:5)

它将两个值都视为字符串,并按字典顺序对它们进行比较。

尝试

<c:set var="pagerTotDisp" value="${9}"/>
<c:set var="TotalPages" value="${10}"/>
<c:if test="${TotalPages < pagerTotDisp}">
  <span>This condition is not true. This text should not be displayed</span>
</c:if>