将几个JSTL forEach循环合并为一个循环

时间:2014-04-15 19:54:12

标签: java jsp jstl

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

但由于两个内部的forEach语句,我对下面的JSTL代码感到不满意。 fruitList和priceList包含完全相同数量的元素。所以我要让一个forEach循环遍历它们的内容。但是我不确定在JSTL中该怎么做。

有什么想法吗?

DataSet对象

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>

1 个答案:

答案 0 :(得分:1)

您可以使用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中的所有元素。选择你想要的。