/board/read.jsp에서 목록보기 버튼을 눌렀을 때 URI에 page 파라미터를 설정해주어야 한다.
&page=${page}
를 추가해서 /board/read에 파라미터를 넘겨준다.<td><a href='${root }board/read?board_info_idx=${board_info_idx}&content_idx=${obj.content_idx}&page=${page}'>${obj.content_subject }</a></td>
@GetMapping("/main")
public String main(@RequestParam int board_info_idx, Model model,
@RequestParam(value = "page", defaultValue = "1") int page) {
...생략...
// board관련 uri에 page 파라미터 필요함
model.addAttribute("page", page);
}
page 파라미터가 잘 넘어왔음을 확인 할 수 있다.
목록버튼에도 설정 해준다.
@GetMapping("/read")
public String read(@RequestParam int board_info_idx, @RequestParam int content_idx, Model model,
@RequestParam int page) {
...생략...
model.addAttribute("page", page);
return "board/read";
}
<a href="${root }board/main?board_info_idx=${board_info_idx}&page=${page}" class="btn btn-primary">목록보기</a>
main 페이지에서는 각 게시판의 가장 최근 글 5개를 보여주도록 설정한다.
더보기를 누르면 각 게시판의 1 페이지로 이동한다.
TopMenuMapper
에 구현 @Select("select board_info_idx, board_info_name "
+ "from board_info_table "
+ "order by board_info_idx")
List<BoardInfo> getTopMenuList();
BoardMapper
에 구현// 게시글 목록
@Select("select c.content_idx, c.content_subject, u.user_name as content_writer_name, "
+ "to_char(c.content_date, 'YYYY-MM-DD') as content_date "
+ "from content_table c join user_table u on c.content_writer_idx = u.user_idx "
+ "where c.content_board_idx = #{content_board_idx} "
+ "order by c.content_idx desc")
List<Content> getContentList(int content_board_idx, RowBounds rowBounds);
new RowBounds(0, 5)
를 반환하는 메서드를 만들어준다.@Service
public class MainService {
@Autowired
private BoardDao boardDao;
// 게시판 리스트
public List<Content> getMainList(int content_board_idx) {
RowBounds rowBounds = new RowBounds(0, 5);
return boardDao.getContentList(content_board_idx, rowBounds);
}
}
@Controller
public class MainController {
private static Logger log = LogManager.getLogger(MainController.class);
@Autowired
private MainService mainService;
@Autowired
private TopMenuService topMenuService;
@GetMapping("/main")
public String main(Model model) {
// 글 목록
ArrayList<List<Content>> list = new ArrayList<List<Content>>();
for(int i = 1; i <= 4; i++) {
List<Content> board = mainService.getMainList(i);
list.add(board);
}
model.addAttribute("list", list);
// 게시판 이름
List<BoardInfo> board_list = topMenuService.getTopMenuList();
model.addAttribute("board_list", board_list);
return "main";
}
}
list
: 게시글 목록, 글 idx, 글 제목, 작성날짜board_list
: 게시판 이름 varStatus="idx"
/ ${board_list[idx.index].board_info_name }
: list와 board_list의 반복횟수가 4번으로 같으므로 ${list}
의 for문이 실행될 때 ${board_list[idx.index].board_info_name}
도 같이 반복해서 게시판의 이름을 출력한다. ...생략...
<!-- 게시판 미리보기 부분 -->
<div class="container" style="margin-top:100px">
<div class="row">
<c:forEach var="sub_list" items="${list }" varStatus="idx"><!-- varStatus : 반복횟수 -->
<div class="col-lg-6" style="margin-top:20px">
<div class="card shadow">
<div class="card-body">
<h4 class="card-title">${board_list[idx.index].board_info_name }</h4>
<table class="table table-hover" id='board_list'>
<thead>
<tr>
<th class="text-center w-25">글번호</th>
<th>제목</th>
<th class="text-center w-25 d-none d-xl-table-cell">작성날짜</th>
</tr>
</thead>
<tbody>
<c:forEach var="obj" items="${sub_list}">
<tr>
<td class="text-center">${obj.content_idx }</td>
<th><a href='${root }board/read?board_info_idx=${board_list[idx.index].board_info_idx }&content_idx=${obj.content_idx }&page=1'>${obj.content_subject }</a></th>
<td class="text-center d-none d-xl-table-cell">${obj.content_date }</td>
</tr>
</c:forEach>
</tbody>
</table>
<a href="${root }board/main?board_info_idx=${board_list[idx.index].board_info_idx }" class="btn btn-primary">더보기</a>
</div>
</div>
</div>
</c:forEach>
</div>
</div>