Digking's cave

My First Blog Project (17) : 게시판 글 목록 페이징처리 본문

Spring/My First Blog Project

My First Blog Project (17) : 게시판 글 목록 페이징처리

디깅 2022. 12. 26. 09:57
728x90

BoardController.java

package com.cos.blog.controller;

import com.cos.blog.config.auth.PrincipalDetail;
import com.cos.blog.service.BoardService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.data.web.PageableDefault;
import org.springframework.security.core.annotation.AuthenticationPrincipal;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;

@Controller
public class BoardController {

    @Autowired
    private BoardService boardService;
    @GetMapping({"","/"})
    public String index(Model model,@PageableDefault(size = 3,sort = "id",direction = Sort.Direction.DESC) Pageable pageable){
        model.addAttribute("boards",boardService.글목록(pageable));
        return "index"; //viewResolver 작동
    }

    //USER권한이 필요
    @GetMapping("/board/saveForm")
    public String saveForm(){
        return "board/saveForm";
    }
}

@PageableDefault를 service로 넘긴다.

 

BoardService.java

package com.cos.blog.service;

import com.cos.blog.model.Board;
import com.cos.blog.model.User;
import com.cos.blog.repository.BoardRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.*;


@Service
public class BoardService {

    @Autowired
    private BoardRepository boardRepository;

    @Transactional
    public void 글쓰기(Board board, User user){
        board.setCount(0);
        board.setUser(user);
        boardRepository.save(board);
    }

    public Page<Board> 글목록(Pageable pageable) {
        return boardRepository.findAll(pageable);
    }
}

 

글목록에서 Pageable을 받으면 return타입이 Page로 바뀐다.

 

index.jsp

<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>

<%@ include file="layout/header.jsp" %>

<div class="container">
<c:forEach var="board" items='${boards.content}'>
  <div class="card m-2">
    <div class="card-body">
      <h4 class="card-title">${board.title}</h4>
      <a href="#" class="btn btn-primary"></a>
    </div>
  </div>
</c:forEach>

<ul class="pagination justify-content-center">
  <c:choose>
    <c:when test='${boards.first}'>
         <li class="page-item disabled"><a class="page-link" href="?page=${boards.number -1}">Previous</a></li>
    </c:when>
    <c:otherwise>
         <li class="page-item"><a class="page-link" href="?page=${boards.number -1}">Previous</a></li>
    </c:otherwise>
  </c:choose>

  <c:choose>
      <c:when test='${boards.last}'>
           <li class="page-item disabled"><a class="page-link" href="?page=${boards.number +1}">Next</a></li>
      </c:when>
      <c:otherwise>
           <li class="page-item"><a class="page-link" href="?page=${boards.number +1}">Next</a></li>
      </c:otherwise>
  </c:choose>
</ul>

</div>

<%@ include file="layout/footer.jsp" %>

first/lase page정보를 가져와서 첫페이지면 previous 버튼 비활성화/ 마지막페이지면 next 버튼 비활성화

 

반응형