我有请求属性“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>
答案 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
中的所有元素。选择你想要的。