2017-02-02 34 views
-3

我在我的控制器中有4個列表。產品,價格和數量。我將這些列表放在結果列表中,並通過模型對象將結果列表傳遞給jsp頁面。 我想輸出如下。如何使用jstl迭代列表的列表?

產品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> 

任何幫助將是apreciated.Thanks。

回答

1

Java是一種面向對象的語言。你應該使用它

不要創建多個相同大小的列表,併爲每個對象的屬性列出一個列表。使用3個字段(例如,名稱爲nameprice,qty)爲該對象創建一個類(例如名爲Product),並使用這些對象的單個列表。

此外,請勿使用原始泛型。總是指定泛型類型參數,例如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> 
+0

非常感謝。有效。其實我正在創建一個項目,所有這些細節都將來自數據庫。我有很多產品,不僅有移動。這只是一個演示代碼,這就是爲什麼原始泛型在那裏,爲此感到遺憾。你可以告訴我這麼多倒票的原因,讓我們這樣的新鮮人感到沮喪。再次感謝。 – jagga

1

你可以使用這個變量s

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

嘗試過,但沒有完全填補我的requirement.It是給作爲•[iPhone,諾基亞]輸出 •[70000,2000 •[1,3] – jagga

+0

我想輸出作爲iPhone 70000 1,nokia 2000 3 – jagga

+1

你最好創建包含你的數據的對象,然後通過'ArrayList '然後你可以調用'$ {s.name}''$ {s.price} '等 –