2012-12-27 18 views
7

Tôi đã tìm kiếm một số ví dụ, vẫn chưa nhận được. Tôi đang đi qua một danh sách các đối tượng TỐT từ bộ điều khiển vào các trang jsp. cố gắng lặp qua đối tượng danh sách, nhưng nó chỉ hiển thị một phần tử nhiều lần. tôi có nên dùng đậu không? Nếu có, bạn có thể cung cấp ví dụ cụ thể hơn cho trường hợp của tôi không.<c: foreach jsp lặp qua danh sách

<c:if test="${not empty listGood}"> 
    <c:forEach var="ob" varStatus="status" items="${listGood}"> 
    <tr> 
     <td><c:out value="${ob.name}"/></td> 
     <td><c:out value="${ob.measure}"/></td> 
     <td><c:out value="${ob.quantity}"/></td> 
     <td><c:out value="${ob.price}"/></td> 
    </tr> 
      </c:forEach> 
      </c:if> 

Cập nhật Đây có bộ điều khiển:

@RequestMapping(value={"/supply"}, method=RequestMethod.POST) 
public String consumptFormulate(Locale locale, Model model, @ModelAttribute ConsumptionForm cmd, HttpServletRequest request){ 
    String[] s_str =cmd.getFromDate().split("/"); 
    String normal_s = s_str[2]+"-"+s_str[0]+"-"+s_str[1]; 
    String[] f_str = cmd.getToDate().split("/"); 
    String normal_f = f_str[2]+"-"+f_str[0]+"-"+f_str[1]; 
    List<Good> list = service.getGoods(normal_s,normal_f,cmd.getSocGoods(),cmd.getTradeObj()); 
    List<ListGoodsForm> listg = new ArrayList<ListGoodsForm>(); 
    org.jfree.data.xy.XYSeries series = new org.jfree.data.xy.XYSeries("За месяц:"); 
    if(!list.isEmpty()){ 
     lg=list; 
     ListGoodsForm listo = new ListGoodsForm(); 
     java.util.Calendar ca = java.util.Calendar.getInstance(); 

     for(Good g: list){ 
      listo.setName(g.getName()); 
      listo.setMeasure(g.getMeasure()); 
      listo.setPrice(g.getPrice()); 
      listo.setQuantity(g.getQuantity()); 
      listg.add(listo); 
      java.util.Date date = g.getDates(); 
      java.text.SimpleDateFormat format = new java.text.SimpleDateFormat("MMMM"); 
       ca.setTime(date); 
      int in = ca.get(java.util.Calendar.MONTH); 
       String month = format.format(date); 
     } 
      } 
     request.setAttribute("listGood",listg); 
    //model.addAttribute("listGood", listg); 
    model.addAttribute("GOODS", prepareDataList()); 
    // model.add 
    model.addAttribute("COMPANY",sservice.getSupplierName()); 
    model.addAttribute("consumptionForm", cmd); 

    return "supply"; 
} 
+0

làm cách nào để chuyển giá trị cho 'listGood'? – gefei

+0

* Cách * không thành công? –

+0

Và có bao nhiêu mục 'listGood' nên có? Có thể có một thông dịch viên sửa đổi danh sách. – Tom

Trả lời

3

Tôi đoán được rằng điều khiển của bạn đang làm như sau:

Good g = new Good(); 
List<Good> goods = new ArrayList<Good>(); 
for (int i = 0; i < 4; i++) { 
    g.setName("a"); 
    ... 
    goods.add(g); 
} 

Điều này có nghĩa là bạn đang sửa đổi cùng một đối tượng Tốt 4 tilmes và thêm nó 4 lần vào danh sách. Cuối cùng, bạn có 4 lần đối tượng tương tự, chứa trạng thái bạn đặt vào trong lần lặp cuối cùng.

Thay vào đó, làm điều này:

List<Good> goods = new ArrayList<Good>(); 
for (int i = 0; i < 4; i++) { 
    Good g = new Good(); 
    g.setName("a"); 
    ... 
    goods.add(g); 
} 

EDIT: và câu hỏi đã chỉnh sửa của bạn chỉ cần xác nhận tôi đoán:

ListGoodsForm listo = new ListGoodsForm(); 

dòng này nên bên trong vòng lặp for, và không bên ngoài.

+0

vâng, đề nghị ur đã giúp, cảm ơn – Olzhas

+0

Giải thích tốt, tôi đã có cùng một vấn đề và tôi đã giải quyết vấn đề này. Cảm ơn bạn! – Ricardo

1

sử dụng mã này để vượt danh sách

request.setAttribute("listGood",listg); 
+0

không có bản ghi trùng lặp, đã thử bạn trả lời nhưng nó không hoạt động, ví dụ nếu danh sách chứa 4 bản ghi, nó sẽ hiển thị 4 lần và mỗi người trong số họ chỉ hàng đầu tiên được hiển thị. Bạn có nghĩ rằng để sử dụng Bean? – Olzhas