Pagination은 Java 웹 프로젝트에서 일반적으로 사용되는 기능입니다. 어제 Spring MVC에서 간단한 페이징 작업 및 검색 페이징이 구현되었습니다. 여기에 기록해 봅시다. 사용 된 프레임 워크는 (mybatis+springmvc+spring)입니다.
먼저 Paginated Tool 클래스가 필요합니다.
1. Pagination
java.io.serializable import; / *** Pagination*/ Public Class Page Serializable {Private STATIC Final Long SerialversionUID = -319804844964374660L; 개인 int pagenow = 1; // 현재 페이지 번호 개인 int pagesize = 4; // 각 페이지에 표시된 레코드 수 개인 int totalCount; // 총 레코드 수 개인 int TotalPageCount; // 총 페이지 수 @SuppressWarnings ( "Unused") private int startpos; // 시작 위치, 0 @suppresswarnings ( "Unused") 개인 부울 하시스 먼저; // 홈 페이지 @suppresswarnings ( "Unused") 개인 부울 haspre; // 이전 페이지 @suppresswarnings ( "Unused") 개인 부울 하스 XT; 마지막 페이지/ ** * 생성자 * @param totalcount * @param pagenow */ public page (int totalcount, int pagenow) {this.totalCount = TotalCount; this.pagenow = pagenow; } / *** 총 페이지 수를 가져옵니다 return (TotalCount % pagesize == 0)? TotalPageCount : TotalPageCount + 1; } public void settotalPageCount (int totalpagecount) {this.totalPageCount = TotalPageCount; } public int getPagenow () {return pagenow; } public void setpagenow (int pagenow) {this.pagenow = pagenow; } public int getPagesize () {return pagesize; } public void setPagesize (int pagesize) {this.pagesize = pagesize; } public int getTotalCount () {return totalCount; } public void settoTalCount (int totalCount) {this.totalCount = TotalCount; } / ** * 선택 레코드의 초기 위치를 가져옵니다 * @return * / public int getStartpos () {return (pagenow -1) * pagesize; } public void setstartpos (int startpos) {this.startpos = startpos; } / *** 첫 페이지* @return* / public boolean ishasfirst () {return (pagenow == 1)? 거짓 : 사실; } public void sethasfirst (boolean hasfirst) {this.hasfirst = hasfirst; } / *** 홈페이지* @return* / public boolean ishaspre () {// 홈페이지가 있으면 이전 페이지가 있으면 홈페이지가 있기 때문에 첫 페이지가 아닙니다. ishasfirst ()를 반환합니까? 사실 : 거짓; } public void sethaspre (boolean haspre) {this.haspre = haspre; } / *** 다음 페이지가 있습니까* @return* / public boolean ishasnext () {// 마지막 페이지가 있으면 마지막 페이지가 있으므로 마지막 페이지가 없기 때문에 마지막 페이지가 없습니다. 반환 ishaslast ()? 사실 : 거짓; } public void sethasnext (boolean hasnext) {this.hasnext = hasnext; } / *** 마지막 페이지가 있습니까* @return* / public boolean ishaslast () {// 마지막 페이지가 아닌 경우 마지막 페이지 리턴이있을 것입니다 (pagenow == getTotalCount ())? 거짓 : 사실; } public void sethaslast (boolean haslast) {this.haslast = haslast; }}이 도구 클래스를 사용하면 먼저 mybatis의 xxxxmapper.xml configuration 파일에 SQL 문을 작성하십시오.
<!-Pagination SQL 문-> <select id = "selectProductsBypage"resultMap = "return value type"> select *에서 user_id = #{userId, jdbctype = integer} {startpos}, #{pagesize} </select> <!-<select id = "get productscount user_id = #{userId, jdbctype = integer} </select>에서 테이블 이름에서 count (*)여기서 우리는 두 <select>가 각각 3과 1 매개 변수로 전달해야 함을 알 수 있습니다. 현재 해당 DAO 파일 IXXXXDAO에 인터페이스를 작성하여 해당 메소드를 작성하십시오. 메소드 이름은 mapper.xml의 id 속성 값과 동일합니다.
/ ** * 주석 방법, 사용자 제품 페이지 매김, 사용자 ID * @Param Page * @Param userId * @return startpos},#{pagesize} */ public list <Products> selectProductSbypage (value = "startpos") 정수 시작, @value (value), @param (value (value) ") userID); / ** * 사용자 ID * @param userID * @return */ public long getProductSCount (@param (value = "userId") 정수 userId)에 로그인하여 제품 수량 정보 및 쿼리 가져 오기;인터페이스 정의가 완료되면 해당 비즈니스 인터페이스 및 구현 방법을 작성하고 인터페이스에서 이러한 메소드를 정의 한 다음 구현 클래스에서 재정의해야합니다.
/ ** * 페이지 디스플레이 제품 * @param 요청 * @param model * @param loginuserid */ void showproductsbypage (httpservletrequest 요청, 모델 모델, int loginuserid);
클래스를 구현하는 다음 방법은 DAO 계층을 호출하고 컨트롤러가 전달한 매개 변수를 수락하여 비즈니스 로직 처리를 수행하는 것입니다. 요청은 프론트 엔드로 전달되는 매개 변수를 얻는 데 사용되며 모델을 사용하여 처리 결과를 JSP 페이지로 반환합니다.
@override public void showproductsbypage (httpservletrequest 요청, 모델 모델, int loginuserid) {String pagenow = request.getParameter ( "pagenow"); 페이지 페이지 = null; List <ProductSblobs> Products = New ArrayList <ProductWithBlobs> (); int totalcount = (int) productDao.getProductSCount (loginUserId); if (pagenow! = null) {page = new Page (TotalCount, integer.parseint (pagenow)); AllProducts = this.productdao.selectProductsBypage (page.getStartpos (), page.getPagesize (), loginUserId); } else {page = 새 페이지 (TotalCount, 1); AllProducts = this.productdao.selectProductsBypage (page.getStartpos (), page.getPagesize (), loginUserId); } model.addattribute ( "제품", 제품); model.addattribute ( "페이지", 페이지); }다음은 컨트롤러의 글입니다. 사용자 가이 실제 제품의 페이지로 이동 해야하는 경우 컨트롤러의 해당 방법을 살펴 봐야합니다. 이 처리 프로세스는 비즈니스 계층 메소드를 호출하여 결과를 JSP 동적 디스플레이에 반환하는 것입니다. 서버는 페이지를 생성하여 현실을 위해 클라이언트 (브라우저)로 전달합니다. 이것은 MVC 프로세스입니다.
/ ** * 페이징 함수를 사용하여 "내 제품"목록 JSP 페이지를 초기화하십시오 * @param request * @param model * @requestmapping (value = "map path", method = requestmethod.get) public String showmyProduct (httpservletRequest 요청, 모델 모델) {// Session User LoginUser get user loginuser = (사용자). request.getSession (). getAttribute ( "loginuser"); // 세션이 잘못되었는지 여부를 결정합니다. } int loginuserid = loginuser.getUserId (); // 여기에서 ProductsErvice는 주입 된 iProductService 인터페이스의 객체입니다. "JSP 경로를 반환 할"; }JSP 페이지의 수락 부분을 쓰지 않을 것입니다. 모든 사람이 동일합니다. 즉, JSTL과 EL을 결합하여 작성합니다. (허용 된 매개 변수가 비어있는 경우, 출력에 대한 제품이 없습니다. 허용 된 매개 변수가 비어 있지 않은 경우에만 출력이 루프 아웃됩니다. << c : <c : elide>와 결합 될 때, Paglination의 관련 코드 만 여기에 제공됩니다.
<!-paging function start-> <div align = "center"> <font size = "2"> Total $ {page.totalPageCount} page </font> <font size = "2"> page $ {page.pagenow} </font> <a href = "myProductPage? pagenow = 1"rel = "reploll" <c : 선택> <c : test = "$ {page.pagenow -1> 0}"> <a href = "myProductPage? pagenow = $ {page.pagenow -1}"rel = "external nofollow"> 이전 페이지 </a> </c : <c : test = "$}"> href = "myProductPage? pagenow = 1"rel = "external nofollow"rel = "외부 nofollow"> 이전 페이지 </a> </a> </c : 언제> </c : 선택> <c : test = "$ {page.totalpagecount == 0}"> <a href = "myproctpage}" rel = "external nofollow"rel = "외부 nofollow"> 다음 페이지 </a> </c : when> <c : test = "$ {page.pagenow + 1 <page.totalpagecount}"> <a href = "myProductPage? pagenow = $ {page.pagenow + 1}"reploll "> repollow"replolol " <c : test = "$ {page.pagenow + 1> = page.TotalPageCount}"> <a href = "myProductPage? pagenow? pagenow? pagenow? pagenow? pagenow? pagenow? pagenow? pagenow? pagenow? pagenow? pagenow? pagenow = $ {page.totalpagecount}"rel = "external nofollow"> 다음 페이지 </a> test = "$ {page.totalPageCount == 0}"> <a href = "myProductPage? pagenow = $ {page.pagenow}"rel = "external nofollow"rel = "external nofollow"> 마지막 페이지 </a> </c : else> <a <a. href = "myProductPage? pagenow = $ {page.totalPageCount}"rel = "external nofollow"rel = "외부 nofollow"> 마지막 페이지 </a> </a> </c : 선택> </div> <!-Pageation Function End->2. 쿼리 페이징
쿼리 페이징과 관련하여 프로세스는 세 번째 매개 변수 (위의 위의 LoginUserId)가 사용자 입력 매개 변수를 수락해야한다는 점을 제외하고는 거의 동일합니다. 이러한 방식으로 컨트롤러에서 사용자 입력 매개 변수를 수락 한 다음 (페이지의 <input>가 GET 메소드에 전달됨) 쿼리 페이징을 완성하기 위해 세션에 추가해야합니다 ( "다음 페이지"의 하이퍼 링크로 인해 페이징 및 검색 페이징을 처리하는 데 다른 JSP 페이지가 사용됩니다. JSP 페이지에서 완성 된 방법은 아직 발견되지 않았으며, 여기에 듀어 코드가 나타나지 않습니다. 별도로 꺼내어 필요한 JSP 페이지에 <clander> 태그로로드하여 코드를 피할 수 있습니다) :
다음은 참조로서 컨트롤러의 코드입니다.
/ ** * 제품 이름 * @param request * @param model * @param model * @param model * @return */ @RequestMapping (value = "map address", method = requestmethod.get) public String searchForProducts (httpservletRequest 요청, 모델 모델) {httpsession session = request.getSession (); 문자열 param = request.getParameter ( "param"); 문자열 조건 = (문자열) session.getAttribute ( "조건"); // 먼저 세션 조건이 비어있는 경우 (조건 == null) {조건 = new String (); session.setattribute ( "조건", 조건); // 세션의 조건이 비어 있으면 전달 된 매개 변수가 비어 있는지 확인하십시오. 비어있는 경우 검색 결과 페이지로 이동하면 (Param == NULL || "".Equals (param)) {return "private/space/productsearchResult"; }} // 세션이 비어 있고 들어오는 검색 조건 PARAM이 비어 있지 않은 경우 (param! = null &&! ( "")) {조건 = param; session.setattribute ( "조건", 조건); } // 세션의 조건 속성 값을 쿼리 조건으로 사용하십시오. "점프 페이지"를 반환합니다. }위는이 기사의 모든 내용입니다. 모든 사람의 학습에 도움이되기를 바랍니다. 모든 사람이 wulin.com을 더 지원하기를 바랍니다.