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

时间:2017-02-02 06:16:37

标签: java spring jsp spring-mvc jstl

我的控制器中有4个列表。产品,价格和数量。我将这些列表放在Result列表中,并通过Model对象将Result列表传递给jsp页面。 我希望输出如下。

产品1

价格1

Qty1

产品2

Price2

Qty2

以下是代码。

控制器代码

@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>

任何帮助都会被贬低。谢谢。

2 个答案:

答案 0 :(得分:1)

您可以使用变量s

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

答案 1 :(得分:1)

Java是一种面向对象的语言。您应使用

不要创建多个相同大小的列表,并为对象的每个属性创建一个列表。使用3个字段(例如,名为Productnameprice)为对象创建一个类(例如名为qty),并使用这些对象的单个列表。 / p>

另外,请勿使用 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>