11.5. 책 목록 서비스 인터페이스 메소드 시그니쳐 생성
src/main/java/sample/spring/yse/BookService.java
List<Map<String, Object>> list(Map<String, Object> map);
책 목록 서비스 인터페이스 메소드 시그니쳐는 클래스 메소드와 맞춘다.
11.6. 책 목록 컨트롤러 메소드 추가
src/main/java/sample/spring/yse/BookController.java
@RequestMapping(value = "list") public ModelAndView list(@RequestParam Map<String, Object> map) { List<Map<String, Object>> list = this.bookService.list(map); ModelAndView mav = new ModelAndView(); mav.addObject("data", list); mav.setViewName("/book/list"); return mav; }
책 목록을 데이터베이스에서 가지고 온다.
List<Map<String, Object>> list = this.bookService.list(map);
데이터를 뷰에 전달할 수 있게 mav 객체에 넣는다.
mav.addObject("data", list);
/book/list 뷰를 리턴한다.
mav.setViewName("/book/list");
11.7. 책 목록 뷰 작성
책 목록 뷰를 생성한다. src => main => webapp => WEB-INF => views => book 우클릭 후 new -> file 을 선택하고 파일 이름을 list.jsp로 생성하면 된다.
src/main/webapp/WEB-INF/views/book/list.jsp
<%@ page pageEncoding="UTF-8" contentType="text/html;charset=utf-8"%> <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <html> <head> <title>책 목록</title> </head> <body> <h1>책 목록</h1> <table> <thead> <tr> <td>제목</td> <td>카테고리</td> <td>가격</td> </tr> </thead> <tbody> <c:forEach var="row" items="${data}"> <tr> <td> <a href="/detail?bookId=${row.book_id}"> ${row.title} </a> </td> <td>${row.category}</td> <td><fmt:formatNumber type="number" maxFractionDigits="3" value="${row.price}" /></td> </tr> </c:forEach> </tbody> </table> <p> <a href="/create">생성</a> </p> </body> </html>
JSTL에서 반복문을 사용하기 위해서는 <c:forEach 구문을 사용할 수 있다.
<c: 태그를 사용하기 위해서는 태그 라이브러리를 선언해야 한다.
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
반복문은 아래와 같이 사용한다.
<c:forEach var="row" items="${data}">
items에는 컨트롤러에서 전달받은 데이터를 넣어준다. 반복 가능한 객체면 어디서 생성한 객체든 무관하다.
items="${data}"
var는 목록의 한 행(row)을 나타내는 변수명을 넣으면 된다.
var="row"
반복문 안에서 데이터는 ${row.이름} 으로 사용할 수 있다.
${row.title}
11.8. 책 목록 화면 확인
책 목록 페이지 http://localhost:8080/list에 접속한다.

데이터가 없으므로 빈 목록이 나오는 것이 정상이다.
생성 페이지 http://localhost:8080/create에서 예제 데이터를 몇 개 넣고 다시 확인해 보자.
