jstl <c:when>标记错误结果

时间:2015-07-22 08:22:03

标签: java jsp jstl

<c:set var="pageCount" value="16"></c:set>
<c:set var="maxSugguestPage" value="7"></c:set>
<c:choose>
    <c:when test="${pageCount < maxSugguestPage}"> <!-- why this block executed? -->
        <c:forEach begin="1" end="${pageCount}" var="index">
            <li><a href="#">${index }</a></li>
        </c:forEach>
    </c:when>
    <c:otherwise>
        <c:set var="firstDot" value="true"></c:set>
        <c:forEach begin="1" end="${pageCount - 1}" var="index">
        <c:choose>
            <c:when test="${index > maxSugguestPage and firstDot == true}">
                <li><a href="#">..</a></li>
                <c:set var="firstDot" value="false"></c:set>
            </c:when>
            <c:otherwise>
                <c:if test="${firstDot == true}">
                    <li><a href="#">${index }</a></li>
                </c:if>
            </c:otherwise>
        </c:choose>
        </c:forEach>
        <li><a href="#">${pageCount }</a></li>
    </c:otherwise>
</c:choose>

这是使用jsp的{​​{1}}文件,但标记jstl存在一些问题。
我声明了两个名为<c:when>和{{}的变量1}},它非常明显pageCount,但在使用maxSuggestPage时,其中的代码块已执行且pageCount > maxSugguestPage阻止不执行。

1 个答案:

答案 0 :(得分:1)

您已将值设置为字符串,而不是数字。这些字符串是lexicographically比较的。

将它们设置为数字。

<c:set var="pageCount" value="${16}" />
<c:set var="maxSugguestPage" value="${7}" />
对具体问题

无关,没有必要将布尔表达式与布尔语句中的固定布尔值进行比较,如${firstDot == true}。只需使用布尔表达式,如${firstDot}