<c:foreach jsp迭代列表

我搜索了几个例子,还没有得到。 我将GOOD对象​​的List从控制器传递到jsp页面。 试图遍历列表对象,但它只重复显示一个元素。 我应该用豆子吗? 如果是,您能否为我的案例提供更具体的例子。

          

更新这里是控制器:

 @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 list = service.getGoods(normal_s,normal_f,cmd.getSocGoods(),cmd.getTradeObj()); List listg = new ArrayList(); 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"; } 

我的猜测是你的控制器正在做以下事情:

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

这意味着您正在修改相同的Good对象4 tilmes,并将其添加到列表中4次。 最后,您拥有相同对象的4倍,包含您在上一次迭代中设置的状态。

相反,这样做:

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

编辑:你编辑的问题刚刚证实了我的猜测:

 ListGoodsForm listo = new ListGoodsForm(); 

这一行应该在for循环内,而不是在外面。

使用此代码传递列表

  request.setAttribute("listGood",listg);