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

Adr*_* Be 4 jsp if-statement jstl el

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

如果我做:

<c:set var="pagerTotDisp" value="9"/>
<c:if test="${pagerTotDisp > 8}">
  <span>pagerTotDisp above 8</span>
</c:if>
Run Code Online (Sandbox Code Playgroud)

它按预期显示"pagerTotDisp 8以上"

<c:set var="TotalPages" value="10"/>
<c:if test="${TotalPages > 2}">
  <span>TotalPages above 2</span>
</c:if>
Run Code Online (Sandbox Code Playgroud)

它按预期显示"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>
Run Code Online (Sandbox Code Playgroud)

它显示"此条件不正确.不应显示此文本".

这是怎么回事?那个JSP无法在同一条件下处理两个变量吗?

谢谢

Bal*_*usC 10

你正在硬编码value属性中的值<c:set>.该<c:set>治疗的硬编码值String.因此EL也将它们评估为String.按字典顺序,9大于10,因为9处于比数字位置更远的位置1.

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

  1. 通过EL表达式设置值.它将被解释为Long代替String.

    <c:set var="pagerTotDisp" value="${9}" />
    <c:set var="TotalPages" value="${10}" /> 
    
    Run Code Online (Sandbox Code Playgroud)
  2. 或者,使用<fmt:parseNumber>,如果你把那些作为String你无法控制的其他地方的变量,这将是唯一的解决方案.

    <fmt:parseNumber var="pagerTotDisp" value="9" />
    <fmt:parseNumber var="TotalPages" value="10" />
    
    Run Code Online (Sandbox Code Playgroud)


JB *_*zet 5

它将两个值都视为String,并按字典顺序比较它们。

尝试

<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>
Run Code Online (Sandbox Code Playgroud)