본문 바로가기

프로그래밍 언어/Html CSS

[Html] JSTL<c:foreach> varStatus로 여러 변수 반복문 사용하기

CommunityController.java

************************************************************************
 [커뮤니티]-[수강후기] 페이지 리스트
************************************************************************
@RequestMapping("/community/review")
public ModelAndView getReviewList(
        HttpServletRequest req, HttpServletResponse res,
        @RequestParam(value="currentPage", defaultValue="1") int currentPage,
        @RequestParam(value="listSize", defaultValue="9") int listSize
        ) throws Exception {
        
        List<ReviewVO> reviewList = reviewService.selectReviewAll((currentPage - 1) * listSize, listSize); 
        
        ArrayList<String> reviewNameList = new ArrayList<>();
        String reviewName = "";
        
        for (ReviewVO review : reviewList) {
            String regUserName = review.getRegUserName(); 
            String nameMask = regUserName.substring(1, regUserName.length());
            String masking = "";
            for(int i=0; i< nameMask.length(); i++) {
                masking += "○";
                reviewName = regUserName.replace(nameMask, masking);
            }
            reviewNameList.add(reviewName);
        }			

        int count = reviewService.selectReviewTotalCount();
        
        //페이징
        Pager page = new Pager(currentPage, count, listSize, 10);
        
        ModelAndView mv = new ModelAndView("/community/review");
        mv.addObject("page", page);
        mv.addObject("totalCount", count);
        mv.addObject("reviewList", reviewList);
        mv.addObject("reviewNameList", reviewNameList);
        
        return mv;
}

 

review.jsp

<div class="review">
  <c:forEach var="r" items="${ reviewList }" varStatus="status">
    <div class="reviewGroup hoverEfct" onclick="reviewOpen('${ r.title }', '${ r.courseName  }', '${ reviewNameList[status.index] }', '${ r.contents  }');">
      <input type="hidden" name="seq" value=${ r.seq } />
      <div class="tit" id="title">${ r.title }</div>
      <div class="con" id="contents">${ r.contents }</div>
      <div class="info">
        <div class="process" id="courseName">${ r.courseName }</div>
        <div class="name" id="regUserName">${ reviewNameList[status.index] }</div>
      </div>
    </div> 
  </c:forEach>
</div><!-- review:end -->

 

컨트롤러에서 보낸 두 배열 reviewList, reviewNameList 를 forEach문으로 화면단에 뿌릴 때 varStatus="status"를 이용한다. 이때 forEach문에 items에 기재하지 않은 list는 ${ reviewNameList[status.index] } 와 같이 [status.index] 를 붙여준다.

 


cf) 상태용 변수 status 사용법

<c:foreach  var="for문 내부에서 사용할 변수" items="${리스트가 받아올 배열이름}"
            varStatus="상태용 변수">

// 반복해서 표시할 내용 혹은 반복할 구문

</c:foreach>

 

${status.current} 현재 for문의 해당하는 번호

${status.index} 0부터의 순서

${status.count} 1부터의 순서

${status.first} 첫 번째인지 여부

${status.last} 마지막인지 여부

${status.begin} for문의 시작 번호

${status.end} for문의 끝 번호

${status.step} for문의 증가값