You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

JSP中如何按索引遍历多个ArrayList数据

在JSP中按索引迭代多个ArrayList数据

嘿,我来帮你搞定这个按索引迭代的问题!你已经成功把多个ArrayList传回JSP了,接下来按索引取对应元素其实很简单,我给你两种常用的方案,你可以根据自己的情况选:

方案一:用JSTL标签迭代(推荐,代码更简洁规范)

首先得确保你的JSP页面已经引入了JSTL核心标签库和函数标签库,在页面顶部加上这两行:

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

假设后端已经把多个ArrayList(比如产品ID列表、产品类型列表、产品状态列表)放到了request域中,比如:

// 后端Java类中的代码示例
request.setAttribute("productIds", productIdsList);
request.setAttribute("productTypes", productTypesList);
request.setAttribute("productStatuses", productStatusesList);

接下来在JSP里就可以按索引循环了:

<%-- 先获取列表的长度,这里随便选一个列表就行,记得要保证所有列表长度一致哦 --%>
<c:set var="listLength" value="${fn:length(productIds)}" />

<%-- 从索引0开始循环到最后一个元素 --%>
<c:forEach var="index" begin="0" end="${listLength - 1}" step="1">
    <div class="product-item">
        产品ID:${productIds[index]}<br>
        产品类型:${productTypes[index]}<br>
        产品状态:${productStatuses[index]}<br>
        <hr>
    </div>
</c:forEach>

方案二:用Java脚本迭代(适合没引入JSTL的场景)

如果暂时没法用JSTL,直接用Java脚本也能实现,不过这种方式现在不太推荐,因为会让JSP代码显得杂乱:

<%
// 先从request中取出转换好的ArrayList
ArrayList<String> productIds = (ArrayList<String>) request.getAttribute("productIds");
ArrayList<String> productTypes = (ArrayList<String>) request.getAttribute("productTypes");
ArrayList<String> productStatuses = (ArrayList<String>) request.getAttribute("productStatuses");

// 先判断列表不为空,避免空指针异常
if (productIds != null && !productIds.isEmpty()) {
    // 按索引循环遍历
    for (int i = 0; i < productIds.size(); i++) {
        String id = productIds.get(i);
        String type = productTypes.get(i);
        String status = productStatuses.get(i);
%>
        <div class="product-item">
            产品ID:<%= id %><br>
            产品类型:<%= type %><br>
            产品状态:<%= status %><br>
            <hr>
        </div>
<%
    }
}
%>

小提醒和优化建议

  • 一定要保证所有ArrayList的长度一致!不然循环的时候会抛出IndexOutOfBoundsException,最好在后端处理数据时就确保这一点,或者在JSP里取所有列表中最小的长度作为循环上限。
  • 其实更优雅的方式是把这些相关数据封装成一个实体类(比如Product类,包含id、type、status等属性),然后把这些对象放到一个ArrayList里传回JSP,这样迭代的时候直接循环对象列表就好,不用按索引取多个列表:
<c:forEach var="product" items="${productList}">
    <div class="product-item">
        产品ID:${product.id}<br>
        产品类型:${product.type}<br>
        产品状态:${product.status}<br>
        <hr>
    </div>
</c:forEach>

这种方式更符合面向对象的思想,也不容易出错。

内容的提问来源于stack exchange,提问作者Mace

火山引擎 最新活动