【问题标题】:<c:foreach jsp iterate over list<c:foreach jsp 遍历列表
【发布时间】:2012-12-12 17:56:13
【问题描述】:

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

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

更新 这是控制器:

@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";  
}

【问题讨论】:

  • 如何将值传递给listGood
  • 我在您的 JSP 页面上看不到任何错误。也许问题出在您的控制器中,请确保将列表正确添加到您的 JSP 中。 JSP 是否显示一些错误?或者在给定的代码块中只是一个没有输出的空白?如果它是空白的,那么你的列表是空的,或者删除 varStatus :) 希望它有帮助
  • listGood 应该有多少项?也许有一个解释器可以修改列表。
  • 您确定您的列表有一条或多条记录.. ????
  • Spring mvc,从模型对象传递。但它只显示一个重复的元素。

标签: java jsp jsp-tags


【解决方案1】:

我的猜测是您的控制器正在执行以下操作:

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

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

相反,这样做:

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

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

ListGoodsForm listo = new ListGoodsForm();

这条线应该在for循环里面,而不是外面。

【讨论】:

  • 很好的解释,我遇到了同样的问题,考虑到这一点我解决了。谢谢!
【解决方案2】:

使用此代码传递列表

 request.setAttribute("listGood",listg);

【讨论】:

  • 没有重复的记录,试过你的答案,但它不起作用,例如如果列表包含4条记录,它将显示4次,每条记录只显示第一行。你觉得用 Bean 吗?
猜你喜欢
  • 2014-03-31
  • 2018-03-22
  • 2011-06-11
  • 2013-01-15
  • 2020-08-23
  • 2023-03-06
  • 2014-01-14
  • 2015-06-22
  • 1970-01-01
相关资源
最近更新 更多