이전글
https://greed-yb.tistory.com/213
Criteria
package com.example.practice.util;
public class Criteria {
// 페이징 기능에서 페이지 번호 출력을 위한 부분
private int page; // 현재 페이지 (클릭한 페이지)
private int perPageNum; // 페이지 당 글의 게시물 개수
// mapper 페이징 sql문에서 사용됨.
private int rowStart; // 행 시작
private int rowEnd; // 행 끝
// private String cat_id; // 카테고리 코드
public Criteria() // 기본 설정
{
this.page = 1; // 현재 페이지 번호.
this.perPageNum = 10; // 페이지에 출력 게시물 개수
}
public void setPage(int page)
{
if (page <= 0)
{
this.page = 1;
return;
}
this.page = page;
}
public void setPerPageNum(int perPageNum)
{
if (perPageNum <= 0 || perPageNum > 100)
{
this.perPageNum = 10;
return;
}
this.perPageNum = perPageNum;
}
public int getPage()
{
return page;
}
public int getPageStart()
{
return (this.page - 1) * perPageNum;
}
public int getPerPageNum()
{
return this.perPageNum;
}
public int getRowStart()
{
return ((page - 1) * perPageNum) + 1;
}
public int getRowEnd()
{
return getRowStart() + perPageNum - 1;
}
@Override
public String toString()
{
return "Criteria [page=" + page + ", perPageNum=" + perPageNum + ", "
+ "getRowStart()=" + getRowStart() + ", getRowEnd()=" + getRowEnd() + "]";
}
}
PageMaker
package com.example.practice.util;
import org.springframework.web.util.UriComponents;
import org.springframework.web.util.UriComponentsBuilder;
public class PageMaker {
private int totalCount;
private int startPage;
private int endPage;
private boolean prev;
private boolean next;
private int displayPageNum = 10;
private Criteria cri;
public void setCri(Criteria cri) {
this.cri = cri;
}
public void setTotalCount(int totalCount) {
this.totalCount = totalCount;
calcData();
}
private void calcData() {
endPage = (int) (Math.ceil(cri.getPage() / (double)displayPageNum) * displayPageNum);
startPage = (endPage - displayPageNum) + 1;
int tempEndPage = (int)(Math.ceil(totalCount / (double)cri.getPerPageNum()));
if(endPage > tempEndPage){
endPage = tempEndPage;
}
prev = startPage ==1 ? false : true;
next = endPage * cri.getPerPageNum() >= totalCount ? false : true;
}
public int getTotalCount() {
return totalCount;
}
public int getStartPage() {
return startPage;
}
public int getEndPage() {
return endPage;
}
public boolean isPrev() {
return prev;
}
public boolean isNext() {
return next;
}
public int getDisplayPageNum() {
return displayPageNum;
}
public Criteria getCri() {
return cri;
}
public String makeQuery(int page){
UriComponents uriComponents =
UriComponentsBuilder.newInstance()
.queryParam("page", page)
.queryParam("perPageNum", cri.getPerPageNum())
.build();
return uriComponents.toUriString();
}
public String makeSearch(int page){
UriComponents uriComponents =
UriComponentsBuilder.newInstance()
.queryParam("page", page)
.queryParam("perPageNum", cri.getPerPageNum())
.queryParam("searchType", ((SearchCriteria)cri).getSearchType())
.queryParam("keyword", ((SearchCriteria)cri).getKeyword())
.build();
return uriComponents.toUriString();
}
@Override
public String toString() {
return "PageMaker [totalCount=" + totalCount + ", startPage="
+ startPage + ", endPage=" + endPage + ", prev=" + prev
+ ", next=" + next + ", displayPageNum=" + displayPageNum
+ ", cri=" + cri + "]";
}
}
현재 코드로는 pageMaker 에 setTotalCount를 하면서 calcData() 메서드를 사용중이다
SearchCriteria
package com.example.practice.util;
public class SearchCriteria extends Criteria{
private String searchType;
private String keyword;
public String getSearchType() {
return searchType;
}
public void setSearchType(String searchType) {
this.searchType = searchType;
}
public String getKeyword() {
return keyword;
}
public void setKeyword(String keyword) {
this.keyword = keyword;
}
@Override
public String toString() {
return super.toString() + " SearchCriteria [searchType=" + searchType + ", keyword="
+ keyword + "]";
}
}
검색이 필요한 경우 사용
변수는 검색하는 내용에 따라 더 생성해서 사용하면 됨
현재는 카테고리 옵션(searchType)과 검색어(keyword) 2가지로 사용
댓글