위와 같이 컨텐츠 타입별로 출력 결과를 다르게 하기 위한 작업
<button onclick="location.href='${pageContext.request.contextPath}/main/main.do?type=movie'">영화</button>
<button onclick="location.href='${pageContext.request.contextPath}/main/main.do?type=tv'">TV</button>
jsp에서 url을 통해 parameter 값을 컨트롤러로 전달할 수 있도록 한다.
@Controller
public class MainController {
@RequestMapping("/main/main.do")
// jsp에서 전달받은 컨텐츠 타입
public ModelAndView main(@RequestParam(value = "type", defaultValue = "movie") String contents_type) {
// 영화 정보를 불러오는 클래스 (이전 글에서 설명한 데이터 파싱 전용 클래스)
GetInfoUtil util = new GetInfoUtil();
List<ContentsVO> release_date = null;
release_date = util.getInfoList(contents_type);
// List에 담긴 ContentsVO를 날짜 내림차순으로 정렬
Collections.sort(release_date, new SortByDate());
ModelAndView mav = new ModelAndView();
mav.setViewName("main");
mav.addObject("release_date", release_date); // 최신 공개 순
return mav;
}
}
또한 VO의 특정 값으로 List를 정렬하기 위해(평점 순, 공개 순) Comparator 인터페이스를 사용해서 클래스를 생성해줬다. → 참조
public class SortByDate implements Comparator<ContentsVO> {
@Override
public int compare(ContentsVO o1, ContentsVO o2) {
Date first = o1.getRelease_date();
Date second = o2.getRelease_date();
return second.compareTo(first);
}
}
그리고 jsp에서는 아래와 같이 c:forEach 를 사용해서 데이터를 반복해서 출력해주면 된다!
<ul>
<li>
<c:forEach var="release_date" begin="0" end="19" step="1" items="${release_date}"> // 한 row에 최대 20개까지만 출력되도록
<a href="${pageContext.request.contextPath}/contents/detail.do?contents_type=${release_date.contents_type }&contents_num=${release_date.contents_num}">
<div>
<div>
<img src="${release_date.poster_path }">
</div>
</div>
<div>
<div>${release_date.title }</div>
<div>
<fmt:formatDate value="${release_date.release_date }" pattern="yyyy-MM-dd" />
</div>
<div>
<span>평균</span>
<span>
${Math.ceil((release_date.vote_average)/2*10)/10} </span>
</div>
<div>인기도 :
${release_date.popularity }</div>
</div>
</a>
</c:forEach>
</li>
</ul>
결과물!