java - 将多个 JSTL forEach 循环合并为一个

标签 java jsp jstl

我有请求属性“dataSetList”,它是对象数据集的列表。我通过 JSTL 显示其数据。那里一切都很好。

但是我对下面的 JSTL 代码不满意,因为有两个内部 forEach 语句。 FruitList 和 PriceList 包含完全相同数量的元素。所以我想要一个 forEach 来循环遍历它们的内容。但我不知道如何在 JSTL 中做到这一点。

有什么想法吗?

数据集对象

public class DataSet {
    String group;
    List<String> fruitList = new ArrayList<String>();
    List<String> priceList = new ArrayList<String>();
}

为了清晰和完整

List<DataSet> dataSetList = new ArrayList<DataSet>();
// set all data here
request.setAttribute("dataSetList", dataSetList);

我想将两个内部 JSTL forEach 合二为一

<c:forEach items="${dataSetList}" var="dataSetVar">
    ${dataSetVar.group} <br/>  
    <c:forEach items="${dataSetVar.fruitList}" var="fruit">                 
        ${fruit} 
    </c:forEach>

    <c:forEach items="${dataSetVar.priceList}" var="price">                 
        ${price} 
    </c:forEach>          
</c:forEach>

最佳答案

您可以使用varStatus属性来获取当前项目的索引:

<c:forEach items="${dataSetList}" var="dataSetVar">
    ${dataSetVar.group} <br/>  
    <c:forEach items="${dataSetVar.fruitList}" var="fruit" varStatus="loopCount">                 
        <c:out value="${fruit}" /> 
        <c:out value="${dataSetVar.priceList[loopCount.index]}" />
    </c:forEach>       
</c:forEach>

但请注意,您的版本和这个版本将给出不同的输出。通过这个循环,每次迭代都会打印两个列表中的元素。在代码中,首先打印 fruitList 中的所有元素,然后打印 priceList 中的所有元素。选择您想要的。

关于java - 将多个 JSTL forEach 循环合并为一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23093200/

相关文章:

jquery - 如何使用 ajax 刷新刷新水平选项卡式设计中的选项卡?

java - 如何修复在 Tomcat 7 中不呈现的 jSTL c foreach 标签?

Java servlet - HTTP 状态 405 - 此 URL 不支持 HTTP 方法 GET/POST

java - 使用 JSTL 在 Select 标签中填充所选项目?

java - 在 Eclipse 中,在 Tomcat 项目上运行 Java EE Web 服务器 "Servlet"尝试部署无关的目录

java - Linq C# 中 Java 的 Stream#Peek 方法的等价物是什么?

html - JSTL 标签在纯 html 文件中不起作用

java - 如何使用JSTL标签格式数据

java - 切木棍: Hackerrank warmup challenge

java - 如何在 Java Applet 中注册 JavaScript 回调?