web-dev-qa-db-ja.com

<c:foreachjspはリストを反復処理します

私はいくつかの例を検索しましたが、まだ取得していません。 GOODオブジェクトのリストをコントローラーからjspページに渡します。リストオブジェクトをループしようとしましたが、1つの要素のみが繰り返し表示されています。豆を使うべきですか?はいの場合、私の場合のより具体的な例を教えてください。

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

私の推測では、コントローラーは次のことを行っています。

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ループの外側ではなく、内側にある必要があります。

3
JB Nizet

このコードを使用してリストを渡します

 request.setAttribute("listGood",listg);
1
Manish Nagar