jstl사용해서 list 받아오기

염지은·2022년 2월 11일
0

spring

목록 보기
3/4

주문내역 받아오기

파이널 프로젝트 진행시 배달 내역 list,상세내역 list로 받아오는 부분을 구현하게 되었고
이차원 배열을 사용하여 뿌려주면 되겠지 생각했었지만,, jstl부분에서
오류가 발생하여 내용 정리해 보려고 한다.

이차원 배열 받아오기

우선 내가 필요한 내역을 받아와야 하는데
프로젝트 구조상
-> 'test'의 아이디를 가진 user가 '중화요리'집에서
메인 요리인 '짜장면'과 '짬뽕'을 결제하려고 하는데
'짜장면'의 옵션으로 '후라이','고기','고춧가루'를 추가하고,
'짬뽕'에는 '전복','오징어','홍합'을 추가한다고 하면

List<OrdersVo> aa=new ArrayList<OrdersVo>();
ArrayList<List<OrdersVo>> cc=new ArrayList<List<OrdersVo>>();
		int n=0;
		for(int i=0;i<mainornum.size();i++) {
			n=mainornum.get(i).getFood_num(); //orders에서 주문 번호 받아 그 주문번호에 해당하는 메인메뉴 food_num받아오기
			map.put("food_num",n); //메인메뉴의 번호가 여러개일 수 있으므로 for문으로 돌려서 map에 넣기
			vo.setFood_num(n); //for문을 돌려 받아온 n을 vo에 세팅해주기
			vo.setOr_num(or_num); //메인 주문번호 vo에 세팅
			List<OrdersVo>optiondetail=service.mainoptionselect(vo); //or_num과 food_num을 넣어서 메인메뉴에 따른 옵션들을 list로 받아오기
            OrdersVo vo1=optiondetail.get(0);//메인메뉴들만 받아서 넣어주기
			cc.add(optiondetail); //받아온 list를 HashMap인 cc에 넣어주기
            aa.add(vo1);
		}
		model.addAttribute("cc",c);

이렇게 메인메뉴,메인메뉴에 따른 옵션 받아오기까지는 list로 받아올 수 있었는데
이 list를 jsp에서 보여주기가 어려웠던 것 같다

<c:forEach var="aa1" items="${aa }" varStatus="st">	<!-- list인덱스 번호 얻어오기 -->
		<c:set var="opt" value="${cc.get(st.index) }"/> <!-- index번호랑 맞는 list꺼내서 변수 지정하기 -->
		<c:set var="price" value="${aa1.food_cost }"/> <!-- 메인메뉴 가격 변수 지정 -->
	<tr>
		<td class="col2">${aa1.food_name }(${aa1.food_cost })</td>  
		<td class="col2">      
	<c:forEach var="op" items="${opt }"> <!-- 인덱스 번호에 맞는 list돌려서 값 얻어오기 -->
		${op.fo_name }(${op.fo_cost })${op.oo_count }개<br> 
			<c:set var="price" value="${price  + (op.fo_cost * op.oo_count)}"/>
		</c:forEach>    
		</td>
		<td class="col2">${price}</td>       
	</tr> 
	</c:forEach>

->List안에 list가 들어있기 때문에 각 메인메뉴에 맞는 옵션 리스트를 받아와서
forEach문을 통해 뿌려주었는데, varStatus="st" 이 부분을 생각하지 못해 시간이 걸렸었다.

cc로 한번에 받아 넘겨주어 뿌려주면 좋겠지만 cc로 한번에 받다보면
메인 메뉴에 따른 option값에 의해 메인 메뉴들도 그 수만큼 뿌려지기때문에
메인 메뉴만 aa에 담아서 뿌려주고
aa에 있는 index번호와 cc.get(st.index)번호가 맞으면 cc에 있는 옵션list를
forEach를 통해 뿌려주었더니

메인메뉴들에 따른 옵션들이 잘 나왔다.

처음에는 주문한 가게 정보, 유저정보, 메인메뉴 및 옵션들을 한번에 불러오고자 했었는데
그렇게 되면 forEach및 쿼리문이 너무 길고 복잡해져서
div 구분을 통해 따로 불러와 뿌려주게 되었다.

0개의 댓글