그 외 페이지 처리

LEE YUJIN·2023년 12월 6일
0

Spring

목록 보기
6/6
post-thumbnail
  1. 게시판의 페이지 번호를 처리한다.
  2. 메인페이지에서 각 게시판의 글이 5개씩 나오도록 구성한다.

페이지 번호 설정

To-do

/board/read.jsp에서 목록보기 버튼을 눌렀을 때 URI에 page 파라미터를 설정해주어야 한다.

  • 현재 프로젝트에서는 /board/main 페이지에서 글의 제목을 누르면 /board/read로 이동하도록 설정되어 있다. request path에 &page=${page}를 추가해서 /board/read에 파라미터를 넘겨준다.

board/main.jsp

<td><a href='${root }board/read?board_info_idx=${board_info_idx}&content_idx=${obj.content_idx}&page=${page}'>${obj.content_subject }</a></td>

BoardController

@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 파라미터가 잘 넘어왔음을 확인 할 수 있다.

목록버튼에도 설정 해준다.

BoardController

	@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";
	}

board/read.jsp

<a href="${root }board/main?board_info_idx=${board_info_idx}&page=${page}" class="btn btn-primary">목록보기</a>


메인 페이지 설정

To-do


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);

MainService

  • 글 5개의 리스트가 필요하므로 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);
	}

}

MainController

@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";
	}
}

main.jsp

  • 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>
profile
개발 공부노트

0개의 댓글