如何使用JSTL在列中写出对象数组

我有一个JSP,我正在显示项目列表。 项目列表将放入垂直列。 每行应具有(列表长度)/(总行数),如果有余数则向上舍入。 现在我们正在做两列,但我们希望自由改变列数。

我的工作不喜欢scriptlet,那么使用JSTL将列表分成相等列的最佳方法是什么?

我会给你一个与Evgeny相似的答案,但更准确一点。 但我需要做出以下假设:

  • 您的每一行都应该具有舍入值( 项目数/列数 )而不是( 列表长度/项目总数 ),因为在该语句中您的列将始终具有1个项目。
  • 您的JSP上下文具有以下属性:
    • values :包含所有元素的集合或数组
    • numRows :一个整数值,用于定义分发列表的行数

首先,由于您不能使用任何scriptlet,因此需要以下taglib声明:

<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %> 

现在,要构建项目网格,您将编写与此类似的内容:

     
<%-- Replace following code with the one needed to display your item --%>  

在这个例子中,我首先舍入除法的值来计算要渲染的行数(请参阅答案如何舍入JSTL中的数字? )。 然后迭代通过项目生成行和列几乎完全像Evgeny那样开始。 主要区别在于您需要在访问列表之前执行索引检查,并且如果您的索引超出范围,只需呈现“ 非中断空格 ”,这样您的表将是“HTML正确”。

你可以这样做:

       ${index < fn:length(elements) ? elements[index] : ""}     

此示例适用于连续的“5”元素。 您可以将其更改为任何其他值。