배열 값은 foreach 의 varStatus ="i" 로 해서 i.index 값을 번호를 붙여준다.
폼 태그에서 배열 값 처리 중요
<form id="form1" name="form1" method="post" action="/shop/cart/update.do">
<table>
<c:forEach var="row" items="${map.list }" varStatus="i">
<tr>
<td>${row.product_name }</td>
<td>
<fmt:formatNumber value="${row.price }" pattern="###,###"/>
</td>
<td>
<input type="number" name="amount[${i.index }]" value="${row.amount }" >
<input type="hidden" name="product_id[${i.index }]" value="${row.product_id }" >
</td>
</tr>
</c:forEach>
</table>
<input type="hidden" name="count" value="${map.count }">
여기서 count 값은 컨트롤에서 List size 를 저장 한 값 이다.
<button id="btnUpdate" >업데이트</button>
</form>
컨트롤로에서 배열 로 값을 받으려 했으나 잘 되지 안아서
request.getParameter("") 를 이용해서 처리 했다.
//장바구니 업데이트
@RequestMapping(value="/cartUpdate.do" )
public String cartUpdate(@RequestParam Integer product_id,
@RequestParam String userid, @RequestParam Integer amount
){
cartService.update(product_id, userid, amount);
return "redirect:list.do";
}
@RequestMapping("/update.do")
public String udateSampleDo(int[] amount, int[] product_id,
HttpSession session){
MemberDTO dto =(MemberDTO)session.getAttribute("loginUser");
String userid =dto.getUserid();
for(int i=0; i<product_id.length ; i++){
CartVO vo =new CartVO();
vo.setUserid(userid);
vo.setProduct_id(product_id[i]);
vo.setAmount(amount[i]);
cartService.update(vo.getProduct_id(), userid, vo.getAmount());
}
return "redirect:/shop/cart/list.do";
}
/*쿼리
Mapper.xml
update cart set amount=amount+#{amount}
where userid=#{userid} and product_id=#{product_id}
*/
// 배열로 값을 받아 처리 하려고 했으나 안된다.
//변경
@RequestMapping("/update.do")
public String udateSampleDo(HttpServletRequest request,
HttpSession session){
MemberDTO dto =(MemberDTO)session.getAttribute("loginUser");
String userid =dto.getUserid();
//레코드 개수
int count =Integer.parseInt(request.getParameter("count"));
for(int i=0; i<count ; i++){
int amount =
Integer.parseInt(request.getParameter("amount["+i+"]"));
int product_id=
Integer.parseInt(request.getParameter("product_id["+i+"]"));
CartVO vo =new CartVO();
vo.setUserid(userid);
vo.setProduct_id(product_id);
vo.setAmount(amount);
cartService.update(vo.getProduct_id(), userid, vo.getAmount());
}
return "redirect:/shop/cart/list.do";
}
/*쿼리
Mapper.xml
update cart set amount=amount+#{amount}
where userid=#{userid} and product_id=#{product_id}
*/
But ->
폼에서 배열이름로 처리 하지 말고 일반 이름으로 처리 하면 컨트롤러 에서
같은 값이 계속 쌓이므로 배열로 받게 된다.
view
<form id="form1" name="form1" method="post" action="/shop/cart/update.do">
<table>
<c:forEach var="row" items="${map.list }" >
<tr>
<td>${row.product_name }</td>
<td>
<fmt:formatNumber value="${row.price }" pattern="###,###"/>
</td>
<td>
<input type="number" name="amount" value="${row.amount }" >
<input type="hidden" name="product_id" value="${row.product_id }" >
</td>
</tr>
</c:forEach>
</table>
<button id="btnUpdate" >업데이트</button>
</form>
컨트롤러에서 배열로 받는다.
@RequestMapping("/update.do")
public String udateSampleDo(int[] amount, int[] product_id,
HttpSession session){
MemberDTO dto =(MemberDTO)session.getAttribute("loginUser");
String userid =dto.getUserid();
for(int i=0; i<product_id.length ; i++){
CartVO vo =new CartVO();
vo.setUserid(userid);
vo.setProduct_id(product_id[i]);
vo.setAmount(amount[i]);
cartService.update(vo.getProduct_id(), userid, vo.getAmount());
}
return "redirect:/shop/cart/list.do";
}
댓글 ( 5)
댓글 남기기