首页 > 解决方案 > 如何在 JSP 中编写这个 JSTL for 循环?无法找到明确的方法:class java.lang.Math.min(Long, Integer)

问题描述

我有以下内容:

    <c:forEach var="i" begin="${Math.max(1,page-5)}" end="${Math.min(page+5,pages)}">
        <a class="btn btn-primary" href="?page=${i}">${i+1}</a>
    </c:forEach>

它给出了错误

javax.el.MethodNotFoundException:无法找到明确的方法:类 java.lang.Math.min(java.lang.Long,java.lang.Integer)

如果我尝试手动将它们转换为(int),那么它会给出不同的错误!

org.apache.jasper.JasperException: /WEB-INF/jsp/home.jsp (行: [528], 列: [2]) [${Math.min((int)(page+5),(int) pages)}] 包含无效的表达式:[javax.el.E​​LException: 无法解析表达式 [${Math.min((int)(page+5),(int)pages)}]]

我也试过

<% for (int i=Math.max(1,${page}-5); i<Math.min(${page}+5,${pages}); i++) { %>

但是 Eclipse 无法解析它。

标签: javajspspring-bootjstl

解决方案


尝试使用pageNo变量名而不是page. 变量名page是问题所在。例如,以下工作:

<c:set var="pageNo" value="3"/>
<c:set var="pageCount" value="6"/>
<c:forEach var="i" begin="${Math.max(1, pageNo-5)}" end="${Math.min(pageNo+5, pageCount)}">
        <a class="btn btn-primary" href="?pageNo=${i}">${i+1}</a>
</c:forEach>


输出将每个数字显示为一个链接(带有 HTML<a/>标签):2 3 4 5 6 7


编辑:来自 JSP 2.0 规范的注释:“变量名称page是类型java.lang.Object并描述为:此页面的实现类的实例处理当前请求页面范围”。它是JSP 页面中可用的隐式对象之一。


推荐阅读