Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用JSTL写出列中的对象数组_Java_Jsp_Jstl - Fatal编程技术网

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

Java 如何使用JSTL写出列中的对象数组,java,jsp,jstl,Java,Jsp,Jstl,我有一个JSP,在上面显示项目列表。项目列表将放置在垂直列中。每行应具有(列表长度)/(总行数),如果有余数,则四舍五入。现在我们正在做两列,但我们希望能够自由地更改列数 我的工作不喜欢Scriptlet,那么使用JSTL将列表分成相等列的最佳方法是什么呢?您可以这样做: <c:forEach items="${elements}" step="5" varStatus="i"> <tr> <c

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


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

您可以这样做:

        <c:forEach items="${elements}" step="5" varStatus="i">
            <tr>
                <c:forEach begin="0" end="4" varStatus="j">
                <c:set var="index" value="${i.index * 5 + j.index}"/> 
                    <td>
                       ${index < fn:length(elements) ? elements[index] : ""}
                    </td>
                </c:forEach>
            </tr>
        </c:forEach>

${index

此示例针对一行中的“5”元素。您可以将其更改为任何其他值。

您可以执行以下操作:

        <c:forEach items="${elements}" step="5" varStatus="i">
            <tr>
                <c:forEach begin="0" end="4" varStatus="j">
                <c:set var="index" value="${i.index * 5 + j.index}"/> 
                    <td>
                       ${index < fn:length(elements) ? elements[index] : ""}
                    </td>
                </c:forEach>
            </tr>
        </c:forEach>

${index

此示例针对一行中的“5”元素。您可以将其更改为任何其他值。

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

  • 您的每一行都应该有一个舍入值(项目数/列数),而不是(列表长度/项目总数),因为在该语句中,您的列将始终有一个项目
  • 您的JSP上下文具有以下属性:
    • :包含所有元素的集合或数组
    • 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" %>

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

<table>
   <c:forEach begin="0" end="${numRows - 1}" varStatus="i">
      <c:set var="rowStart" value="${i.index * numColumns}" />
      <tr>
          <fmt:formatNumber var="numColumns" value="${fn:length(values) / numRows}"
             maxFractionDigits="0" />
          <c:forEach begin="0" end="${numColumns - 1}" varStatus="j">
             <c:set var="index" value="${rowStart + j.index}"/>
             <td>
                <c:choose>
                   <c:when test="${index lt fn:length(values)}">
                      <%-- Replace following code with the one needed to display your item --%>
                      <c:out value="${values[index]}" />
                   </c:when>
                   <c:otherwise>&nbsp;</c:otherwise>
                </c:choose>
             </td>
         </c:forEach>
      </tr>
   </c:forEach>
</table>


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

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

  • 您的每一行都应该有一个舍入值(项目数/列数),而不是(列表长度/项目总数),因为在该语句中,您的列将始终有一个项目
  • 您的JSP上下文具有以下属性:
    • :包含所有元素的集合或数组
    • 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" %>

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

<table>
   <c:forEach begin="0" end="${numRows - 1}" varStatus="i">
      <c:set var="rowStart" value="${i.index * numColumns}" />
      <tr>
          <fmt:formatNumber var="numColumns" value="${fn:length(values) / numRows}"
             maxFractionDigits="0" />
          <c:forEach begin="0" end="${numColumns - 1}" varStatus="j">
             <c:set var="index" value="${rowStart + j.index}"/>
             <td>
                <c:choose>
                   <c:when test="${index lt fn:length(values)}">
                      <%-- Replace following code with the one needed to display your item --%>
                      <c:out value="${values[index]}" />
                   </c:when>
                   <c:otherwise>&nbsp;</c:otherwise>
                </c:choose>
             </td>
         </c:forEach>
      </tr>
   </c:forEach>
</table>


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

在c中:如果标记将4的值更改为任意数字(您需要多少列)


${item}

在c:if标记中,将4的值更改为任意数字(您需要多少列)


${item}

我不确定我是否理解您的问题,您能否详细说明,也许可以用一些示例数据,以及您大致希望如何安排?很难理解/想象您实际想要实现的目标。我认为最好是显示生成的HTML应该是什么样子。然后更容易提出JSP/JSTL代码应该如何生成HTML。因此,如果列表中的项目数为7,我想:第1项第2项第3项第4项第5项第6项第7项我的答案不能解决问题吗?@EvgenyRetyunsky,这是一个很好的贡献,但Alsonso的答案正是我想说的。我不确定我是否理解你的问题,你能详细说明一下吗,也许可以用一些示例数据,以及你大致希望它是如何布置的?很难理解/想象你实际想要实现的目标。我认为最好是显示生成的HTML应该是什么样子。然后更容易提出JSP/JSTL代码应该如何生成HTML。因此,如果列表中的项目数为7,我想:第1项第2项第3项第4项第5项第6项第7项我的答案不能解决问题吗?@EvgenyRetyunsky,这是一个很好的贡献,但是阿尔松索的答案就是我想说的。如果你知道外环应该有5个。但是您需要计算内部循环中的项数吗?我在这方面遇到了麻烦,因为我在jstl的除法和取整方面遇到了麻烦。还有,最后一个我可以吗