如何使用 jstl 迭代列表列表?

How to iterate list of lists using jstl?

我的控制器中有 4 个列表。产品、价格和数量。我将这些列表放在结果列表中,并通过模型对象将结果列表传递到 jsp 页面。 我想要如下输出。

产品 1

价格 1

数量 1

产品 2

价格2

数量 2

这是代码。

控制器代码

@RequestMapping(value="/demo1")
    public ModelAndView demo1(){
        List productName=new ArrayList();
        List price=new ArrayList();
        List qty=new ArrayList();
        List result=new ArrayList();
        productName.add("iphone");
        productName.add("nokia");
                price.add("70000");
                price.add(2000);
                qty.add(1);
                qty.add(3);
                result.add(productName);
                result.add(price);
                result.add(qty);
                ModelAndView model=new ModelAndView("demo");
                model.addObject("result", result);
                return model;
    }

我正在尝试跟随 jsp 但没有得到想要的输出。

JSP代码

<c:set var="i" value="0" scope="page" />
 <c:forEach var="s" items="${result}" varStatus="ctr">
    <ul>
        <li>${s[i]}
            <%-- <ul>
                <c:forEach var="s1" items="${s}">
                    <li>${s1}</li>
                </c:forEach>
            </ul> --%>
        </li>
    </ul>
      <c:set var="i" value="${i+1}" scope="page" />
</c:forEach>

任何帮助都将是 apreciated.Thanks。

你可以只使用变量 s

 <c:forEach var="s" items="${result}" varStatus="ctr">
       ${s}
 </c:forEach>

Java 是一种 Object-Oriented 语言。你应该使用它

不要创建多个相同大小的列表,每个 属性 对象都有一个列表。使用 3 个字段(例如命名为 namepriceqty)为对象(例如命名为 Product)创建一个 class,并使用单个列表那些对象。

另外,不要使用 raw 泛型。始终指定泛型类型参数,例如List<String> productName 而不是 List productName.

public class Product {
    private String name;
    private double price;
    private int    qty;
    public Product(String name, double price, int qty) {
        this.name = name;
        this.price = price;
        this.qty = qty;
    }
    public String getName() {
        return this.name;
    }
    public double getPrice() {
        return this.price;
    }
    public int getQty() {
        return this.qty;
    }
}
List<Product> products = new ArrayList<>();
products.add(new Product("iphone", 70000, 1));
products.add(new Product("nokia", 2000, 3));
ModelAndView model = new ModelAndView("demo");
model.addObject("products", products);
return model;
<c:forEach var="product" items="${products}">
  <ul>
    <li><c:out value="${product.name}"/></li>
    <li><fmt:formatNumber value="${product.price}" type="CURRENCY"/></li>
    <li>${product.qty}</li>
  </ul>
</c:forEach>