박종택
30
2019-08-08 19:28:45 작성 2019-08-08 19:46:01 수정됨
11
232

map에 담긴 list 꺼내고 싶은데 도와주세요



@RequestMapping("list.do")
	public ModelAndView list(HttpSession session, ModelAndView mav) {
		Map<String, Object> map = new HashMap<>();
			List<CartDTO> list = cartService.listCart(user_id);
			// data베이스에 있는 자료를 가져 옵니다
			int sumMoney = cartService.sumMoney(user_id);

			map.put("list", list); // 맵에 list자료 추가
                        map.out("sumMoney",sumMoney); 맴에 sumMoney자료 추가
			mav.setViewName("shop/cart_list"); // jsp 페이지 이름
			mav.addObject("map", map); // jsp에 전달할 데이터
			return mav;
		}

컨트롤 부분에서 list 값을 map에 담았습니다.

CartDTO 값입니다.

public class CartDTO {
	private int cart_id;
	private int user_id;
	private String user_name;
	private int product_id;
	private String product_name;
	private int price;
	private int money;
	private int amount;
}
//get set, toString

컨트롤러에서 ModelAndView객체에 담은 map 에 담긴 list를 사용합니다

여기 까지는 forEach 문에 var 과 items를 이용 해서 사용 했는데 

<table>
 <tr>
 <td>회원ID</td>
 <td>회원name</td>
.....
</tr>
<c:forEach var="row" items="${map.list}">
<tr>
<td>${row.user_id}</td>
<td>${row.user_name}</td>
</tr>

<c:forEach>
</table>


문제는table 밖인 <c:forEach>문 밖에서는 어떻게 사용해야 할지 잘 모르겠습니다.



<div>
<form action="${path}/shop/cart/write.do">
<input type="hidden" name= "user_id" value="${map.list.user_id}">
<input type="submit" value="보내기">
</form>
</div>

이렇게 하면

java.lang.NumberFromatException: for input string : "user_id"가 나옵니다.

${map.list.user_id}의 값을 쓰고 싶은데 사용 방법을 잘 모르겠습니다.

user_id 단일 값을 쓰고 싶은데 어떻게 써야 할지 잘 모르겠습니다.

table 밖인 <c:forEach>문 밖에서는 어떻게 사용해야 할지.....

0
0
  • 답변 11

  • 연애는필수가아니라선택
    2019-08-08 19:47:55

    c:forEach var="zzz" items="${map}"

         c:forEach var="xxx" items="${zzz.value}"

      ${xxx.cart_id}

         /c:forEach

    /c:forEach

    0
  • 박종택
    30
    2019-08-08 19:58:16
    이해는 가긴 하지만 구체적인 예시 있으면 부탁드리겠습니다
    0
  • 연애는필수가아니라선택
    2019-08-08 20:05:47

    1. 모델에 map이라는 키값으로 저장된 녀석을 zzz 변수에 담아서 루프를 돌린다. 

    ( map이라는 키값엔 Map<String,Object> 가 있다).


    2. zzz변수엔 "list"라는 key값으로 list라는 value가 저장되있다.  이 value는 list이므로 이 value안에 저장된

    녀석들을 꺼낼려면 또 for문을 돌린다.

    3. zzz.value  <- 맵의 value값 == list



    1
  • 지나가던신입
    466
    2019-08-08 20:06:38

    c:forEach var="zzz" items="${map}"

         c:forEach var="xxx" items="${zzz.list}"

      ${xxx.user_id}

         /c:forEach

    /c:forEach

    질문자님이 입력하신 변수를 보면 이런식으로하시면될거같은데요

    0
  • 지나가던신입
    466
    2019-08-08 20:07:20
    0
  • 박종택
    30
    2019-08-08 20:26:25 작성 2019-08-08 20:27:53 수정됨

    c:forEach를 쓰면 배열로 값을 주는데 


    배열속에 있는 단일 정보 값

    user_id 배열이 아니라

    user_id 값 1개만


    값 1개만을 가져 오려면 다른 방법이 없을까요?


    0
  • 박종택
    30
    2019-08-08 20:41:42


    0
  • minarai
    2k
    2019-08-08 20:48:56

    컨트롤러에서 따로 뺀다음에 모델로 보내면 되지 않나요 1개만 쓸 값을 미리 뺀다음에

    0
  • 박종택
    30
    2019-08-08 20:50:59 작성 2019-08-08 20:52:28 수정됨

    아직 스프링 초보자라  혹시 예시 가능 하면 부탁 드리겠습니다 

    0
  • 에스파뇰조금합니다
    159
    2019-08-08 23:27:27

    사용하고자 하는 user_id를 map에 저장한 다음 jsp로 보내주면 될 것 같아요.


    map.put("list", list); // 이거 처럼
    map.put("user_id", 사용하고자 하는 user_id);


    1
  • 박종택
    30
    2019-08-09 11:25:01

    감사합니다 하루 종일 생각 했던 것을 간단하게 해결 해주셨네요 

    좋은 하루 되세요

    0
  • 로그인을 하시면 답변을 등록할 수 있습니다.