1저번장에서는 전체 데이터 수와 해당 페이지의 데이터 수 를 출력했습니다.
이제 추가할 기능은 사용자가 3페이지에서 글을 작성하고 다시 목록으로 돌아가면
보통의 다른 사이트 같은 경우 1페이지로 돌아가지만 3페이지로 페이지를 유지할 수 있는 기능을 해보려고 합니다.
/board/listPage?page=6&perPageNum=10 , /board/read?page=6&perPageNum=10&bno=118
이런식으로 구현을 할건데요.
이렇게 하기 위해 UriComponenets와 UriComponentsBuilder 클래스를 이용할 것입니다.
해당 테스트 코드는 다음과 같습니다.
package kr.co.web;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.util.UriComponents;
import org.springframework.web.util.UriComponentsBuilder;
public class URITestData {
private static final Logger logger = LoggerFactory.getLogger(URITestData.class);
@Test
public void uriTest() {
int page = 4;
int perPageNum = 10;
UriComponents uriComponets = UriComponentsBuilder.newInstance()
.path("/board/listPage")
.queryParam("page", page)
.queryParam("perPageNum", perPageNum)
.build();
String uri = "/board/listPage?page=" + page + "&perPageNum=" + perPageNum;
logger.info(uri);
logger.info(uriComponets.toString());
}
}
이렇게 코드를 작성하고 테스트를 진행 해보면
다음과 같이 uri가 생성되었습니다.
또 encode()메서드도 제공하는데 URI에 허용되지 않는 값들이 인코딩 됩니다.
package kr.co.web;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.util.UriComponents;
import org.springframework.web.util.UriComponentsBuilder;
public class URITestData {
private static final Logger logger = LoggerFactory.getLogger(URITestData.class);
@Test
public void uriTest() {
int page = 4;
int perPageNum = 10;
UriComponents uriComponets = UriComponentsBuilder.newInstance()
.path("/board/listPage")
.queryParam("page", page)
.queryParam("perPageNum", perPageNum)
.queryParam("search", "진연석")
.build()
.encode();
String uri = "/board/listPage?page=" + page + "&perPageNum=" + perPageNum;
logger.info(uri);
logger.info(uriComponets.toString());
}
}
결과는
다음과 같이 진연석이라는 문자가 인코딩되었습니다.
이제 본격적으로 해당 프로젝트에 URIcomponents를 추가할건데요
PageMaker와 Criteria에 makeQuery라는 메서드를 추가해줍니다.
public String makeQuery(int page) {
UriComponents uriComponents = UriComponentsBuilder.newInstance()
.queryParam("page", page)
.queryParam("perPageNum", this.cri.getPerPageNum())
.build()
.encode();
return uriComponents.toString();
}