본문 바로가기

jQuery/EMP Paging

EMP Paging with bootpag jQuery plugin

jQuery 페이징 플러그인 bootpag을 이용한 페이징 예


jQuery 페이징 플러그인 중에서 bootpag 이라는 플러그인을 사용하여 페이징을 구현한 예이다

bootpag 설정법은 이 링크를 눌러 확인하세요 여기


empList.jsp

<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> <fmt:requestEncoding value="utf-8"/>: <jsp:useBean id="dao" class="org.kdea.emp.EmpDAO" scope="page"/> <jsp:useBean id="svc" class="org.kdea.emp.EmpSvc"> <jsp:setProperty name="svc" property="dao" value="${dao}"/> <jsp:setProperty name="svc" property="request" value="<%=request%>"/> <jsp:setProperty name="svc" property="*"/> </jsp:useBean> <c:set var="list" value="${svc.pageList}"/> <!DOCTYPE html> <html> <head> <script src="//code.jquery.com/jquery-2.1.3.min.js"></script> <script src="jquery.bootpag.min.js"></script> <script src="//raw.github.com/botmonster/jquery-bootpag/master/lib/jquery.bootpag.min.js"></script> <link rel="stylesheet" href="//netdna.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap.min.css"> <style type="text/css"> #content {display:inline-block; width:200px; height:120px; border:1px solid black; margin:0px auto; } </style> <script> // init bootpag $(function(){ $('#page-selection').bootpag({ total: ${totalPages}, <!-- total pages --> page: ${currPage}, <!-- current page --> maxVisible: 2, <!-- links per page --> leaps: true, firstLastUse: true, first: '←', last: '→', wrapClass: 'pagination', activeClass: 'active', disabledClass: 'disabled', nextClass: 'next', prevClass: 'prev', lastClass: 'last', firstClass: 'first' }).on("page", function(event, num){ //$(".content").html("Page " + num); // or some ajax content loading... location.href="empList.jsp?rpp=5&page="+num; // 한 페이지에 5행씩 클릭한 페이지의 리스트 요청 }); }); </script> </head> <body> <div id="content"> <c:forEach var="e" items="${list}" > <div>${e.empno} ${e.ename} ${e.mgr}</div> </c:forEach> </div> <div id="page-selection"><!-- Pagination goes here --></div> </body> </html>


EmpSvc.java

package org.kdea.emp;

import java.util.*;

import javax.servlet.http.*;

public class EmpSvc 
{
	private HttpServletRequest request;
	private int page;	// Current Page
	private int rpp; 	// Rows Pre Page
	private EmpDAO dao;
	
	public EmpSvc(){}
	
	public List<EmpVO> getPageList(){
		page = (page==0) ? 1 : page;
		rpp = (rpp==0) ? 5 : rpp;
		request.getSession().setAttribute("currPage", page);
		List<EmpVO> list = dao.getPageList(page,rpp);
		int totalPages = (int)Math.ceil(EmpVO.getTotalRows()/(rpp+0.0));
		request.getSession().setAttribute("totalPages", totalPages);
		return list;
	}

	public int getPage() {
		return page;
	}

	public void setPage(int page) {
		this.page = page;
	}

	public EmpDAO getDao() {
		return dao;
	}

	public void setDao(EmpDAO dao) {
		this.dao = dao;
	}

	public HttpServletRequest getRequest() {
		return request;
	}

	public void setRequest(HttpServletRequest request) {
		this.request = request;
	}

	public int getRpp() {
		return rpp;
	}

	public void setRpp(int rpp) {
		this.rpp = rpp;
	}
}


EmpDAO.java

package org.kdea.emp;

import java.sql.*;
import java.util.*;

public class EmpDAO 
{
	private Connection conn;
	private PreparedStatement pstmt;
	private ResultSet rs;
	
	private String jdbc_driver = "oracle.jdbc.OracleDriver";
	private String db_url = "jdbc:oracle:thin:@localhost:1521:xe";
	
	private Connection getConn() {
	   try{
	     Class.forName(jdbc_driver);
	     conn = DriverManager.getConnection(db_url,"scott", "TIGER");
	     return conn;
	   }catch(Exception ex){
		   ex.printStackTrace();
	   }
	   return null;
	}
	
	public List<EmpVO> getPageList(int page, int rpp){
		String sql = 
		"WITH t1(empno,ename,mgr,lvl, totalRows)AS "+
		"("+
			  "SELECT empno, ename, mgr, 0 AS lvl, (SELECT COUNT(*) FROM emp) totalRows "+
			  "FROM emp  "+
			  "WHERE mgr IS NULL "+
			  "UNION ALL "+
			  "SELECT e.empno, e.ename, e.mgr, t1.lvl+1 AS lvl, t1.totalRows  "+
			  "FROM emp e  "+
			  "JOIN t1  "+
			  "ON e.mgr = t1.empno "+
		") "+
		"SEARCH DEPTH FIRST BY empno SET ordering "+
		"SELECT * FROM "+
		"( "+
			  "SELECT empno, LPAD(' ', lvl*3, ' ')||ename AS ename, mgr, totalRows, TRUNC((ordering-1)/?)+1 AS page "+ 
			  "FROM t1  "+
			  "ORDER BY ordering "+
		") "+
		"WHERE page=?";
		
		conn = getConn();
		try {
			pstmt = conn.prepareStatement(sql);
			pstmt.setInt(1, rpp);
			pstmt.setInt(2, page);
			rs = pstmt.executeQuery();
			List<EmpVO> list = new ArrayList<>();
			while(rs.next()){
				EmpVO emp = new EmpVO();
				emp.setEmpno(rs.getInt("EMPNO"));
				emp.setEname(rs.getString("ENAME"));
				emp.setMgr(rs.getInt("MGR"));
				emp.setTotalRows(rs.getInt("TOTALROWS"));
				list.add(emp);
			}
			return list;
		} catch (SQLException e) {
			e.printStackTrace();
		} finally{
			closeAll();
		}
		return null;
	}
	
	private void closeAll(){
		try{
			if(rs!=null) rs.close();
			if(pstmt!=null) pstmt.close();
			if(conn!=null) conn.close();
		}catch(Exception ex){
			ex.printStackTrace();
		}
	}
}


EmpVO.java

package org.kdea.emp;

public class EmpVO 
{
	private int empno;
	private String ename;
	private int mgr;
	private static int totalRows;
	
	public int getEmpno() {
		return empno;
	}
	public void setEmpno(int empno) {
		this.empno = empno;
	}
	public String getEname() {
		return ename;
	}
	public void setEname(String ename) {
		this.ename = ename;
	}
	public int getMgr() {
		return mgr;
	}
	public void setMgr(int mgr) {
		this.mgr = mgr;
	}
	public static int getTotalRows() {
		return totalRows;
	}
	public static void setTotalRows(int totalRows) {
		EmpVO.totalRows = totalRows;
	}
}