Сравнение чисел в выражении EL, похоже, не работает - PullRequest
4 голосов
/ 23 августа 2011

В 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 ]

10 голосов
/ 23 августа 2011

Вы жестко кодируете значение в атрибуте 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}" /> 
    
  2. Или используйте <fmt:parseNumber>, который будет единственным решением, если у вас есть переменные String из других источников, которые вы не можете контролировать.

    <fmt:parseNumber var="pagerTotDisp" value="9" />
    <fmt:parseNumber var="TotalPages" value="10" />
    
5 голосов
/ 23 августа 2011

Он обрабатывает оба значения как строки и сравнивает их лексикографически.

Попробуйте

<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>
...