2012-12-27 20 views
7

Przeszukałem kilka przykładów, wciąż nie dostałem. Przesyłam listę obiektów GOOD z kontrolera na strony jsp. próbuje pętli nad obiektem listy, ale pokazuje wielokrotnie tylko jeden element. czy powinienem używać fasoli? Jeśli tak, czy mógłbyś podać bardziej konkretny przykład mojej sprawy.<c: foreach jsp iterate over list

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

Aktualizacja Oto kontroler:

@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

W jaki sposób przekazujesz wartość do 'listGood'? – gefei

+0

* W jaki sposób * zawodzi? –

+0

A ile pozycji powinien mieć 'listGood'? Może istnieje tłumacz, który modyfikuje listę. – Tom

Odpowiedz

3

Domyślam się, że kontroler jest w następujący sposób:

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

Oznacza to, że modyfikujesz ten sam obiekt Dobry obiekt 4 i dodajesz go 4 razy do listy. Na koniec masz 4 razy ten sam obiekt, zawierający stan, który ustawiłeś w ostatniej iteracji.

Zamiast to zrobić:

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

EDIT: i edytowane pytanie tylko potwierdził moje przypuszczenia:

ListGoodsForm listo = new ListGoodsForm(); 

linia ta powinna znajdować się wewnątrz pętli, a nie na zewnątrz.

+0

Tak, ur sugestia pomógł, dzięki – Olzhas

+0

Dobre wyjaśnienie, miałem ten sam problem i rozwiązałem go, biorąc pod uwagę to. Dziękuję Ci! – Ricardo

1

użyć tego kodu do listy przejść

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

nie ma żadnych duplikatów, próbowano ci odpowiedzieć, ale nie działa, na przykład jeśli lista zawiera 4 rekordy, wyświetli 4 razy i w każdym z nich wyświetlany jest tylko pierwszy wiersz. Czy myślisz, że chcesz użyć fasoli? – Olzhas