2017-02-02 41 views
-3

У меня есть 4 списка в моем контроллере. Продукт, цена и количество. Я помещаю эти списки в список результатов и передаю список результатов через объект модели на страницу jsp. Я хочу, чтобы результат был следующим.Как перечислить список списков с помощью jstl?

Product1

взнос1

Qty1

Product2

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 является объектно-ориентированным языком. Вы должны использовать его.

Не создавайте несколько списков одинакового размера со списком для каждого свойства объекта. Создайте класс для объекта (например, с именем Product) с тремя полями (например, с именем name, price, qty) и используйте один список этих объектов.

Также не используйте необработанные дженерики. Всегда указывайте общие аргументы типа, например. 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, Nokia] • [70000, 2000] • [1, 3] – jagga

+0

я хочу выход как iphone 70000 1, nokia 2000 3 – jagga

+1

Вам было бы лучше создавать объекты, содержащие ваши данные, а затем с помощью 'ArrayList ', тогда вы можете вызвать '$ {s.name}' '$ {s.price} 'и т. д. –