스프링

 

배열 값은  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";
	}

 

 

about author

PHRASE

Level 60  머나먼나라

길은 가까운 데에 있다. 그런데도 이것을 먼 데서 구한다. -공자

댓글 ( 5)

댓글 남기기

작성