Spring 리스트 페이징 방법 3. 컨트롤러 및 화면 / Spring list paging Controller

북마크 추가

이번에는 컨트롤러와 화면 예제를 설명하도록 하겠습니다.

1. SampleController.java

요청 페이지를 PathVariable로 받아 서비스에 넘겨줍니다.

화면은 JSP로 되어 있고 Tiles가 적용되어 있어 String으로 sample을 리턴하게 되어있습니다. (sample.jsp)

@Controller

public class SampleController {

@Autowired

private SampleService sampleService;

@RequestMapping(value = "/sample/{page}", method = RequestMethod.GET)

public String sample(@PathVariable("page") int page, Model model) throws Exception {

SampleResult sampleResult = sampleService.pagingSample(page);

model.addAttribute("sampleResult",sampleResult);

return "sample";

}

}


2. sample.jsp

테이블가 페이지는 jstl을 이용해 그려줍니다.

<table class="table table-hover">

<tbody>

<c:forEach var="i" items="${sampleList}" varStatus="status">

<tr>

<td style="width:10%;">${(pagination.rowCount - status.index) - ( (pagination.currentPage - 1)  *  pagination.displayRow ) }</td>

<td style="width:60%;">${i.title } </td>

<td style="width:30%;">${i.regdate }</td>

</tr>

</c:forEach>

</tbody>

</table>

<div class="col-lg-12 col-xs-12 center">

<ul class="pagination pagination-warning" style="margin:0px;">

<c:if test="${pagination.startPage-1 != 0 }">

<li><a href="/sample/${pagination.startPage - 1}">&laquo;</a></li>

</c:if>

<c:forEach var="i" begin="${pagination.startPage }" end="${pagination.endPage }" varStatus="status">

<li <c:if test="${i eq pagination.currentPage }">class="active"</c:if>><a href="/sample/${i}">${i}</a></li>

</c:forEach>

<c:if test="${pagination.endPage % pagination.pageCount == 0 && pagination.lastPage > pagination.endPage}">

         <li><a  href="/sample/${pagination.endPage+1}">&raquo;</a></li>

</c:if>

</ul>

</div>


테이블 td의 첫번째 부분 에서

(총 게시물 수 - loop의 index값) - ((현재페이지 -1) * 화면당 표시 리스트수) 를 사용해 계산하게 되면 게시물 번호를 달 수 있습니다.

- varStatus의 index는 0부터 시작하고 count는 1부터 시작합니다. 여기서는 index를 사용해야 됩니다.

pagination쪽을 보면 

pagination.startPage-1 != 0

현재 페이징 구간의 시작값이 0이 아닌경우는 6부터 시작하는 두번째 구간 이후라는 의미로  < 화살표를 그려줍니다. 

그 후 loop를 돌면서 시작페이지부터 끝 페이지까지 페이지 번호를 그려 줍니다. 이때 현재 페이지 번호와 loop안의 i 값이 일치하는 경우 특정 클래스를 줘 현재 페이지를 강조 할 수 있습니다.

마지막 페이지를 페이징 구간 개수로 mod 연산한 결과가 0 이고 마지막페이지가 현재구간 마지막 페이지 보다 큰 경우는

현재페이지가 표시된 페이징 구간의 마지막 페이지 ( 1 2 3 4 5 페이지의 5페이지) 이고 6페이지 이상이 있다는 뜻이므로 > 화살표를 표시해 줍니다.




동작중인 샘플은 아래 링크를 통해 확인 할 수 있습니다.

List paging sample page




HKH
2018-10-17 13:11
SHARE
keyboard_arrow_left
keyboard_arrow_up