전자정부프레임워크 Pagination 페이징처리
- 코딩/egovframework
- 2020. 1. 30.
전자정부프레임워크 Pagination 페이징처리
기본적으로 전자정부 프레임워크에서는 페이징 처리를 편하게 하기 위해 <ui:pagination/> 태그를 제공한다.
PaginationInfo는 렌더링에 필요한 데이터가 담겨져있는 빈 클래스로, Tag클래스에서 여기에 있는 정보를 기반으로 페이징을 렌더링 한다.
이름 | 설명 | 사용자입력여부 | 계산공식 |
currentPageNo | 현재 페이지 번호 | yes | |
recordCountPerPage | 한 페이지당 게시되는 게시물 건 수 | yes | |
pageSize | 페이지 리스트에 게시되는 페이지 건수 | yes | |
totalRecordCount | 전체 게시물 건 수 | yes | |
totalPageCount | 페이지 개수 | no | totalPageCount = ((totalRecordCount-1)/recordCountPerPage) + 1 |
firstPageNoOnPageList | 페이지 리스트의 첫 페이지 번호 | no | firstPageNoOnPageList = ((currentPageNo-1)/pageSize)*pageSize + 1 |
lastPageNoOnPageList | 페이지 리스트의 마지막 페이지 번호 | no | lastPageNoOnPageList = firstPageNoOnPageList+pageSize-1 if(lastPageNoOnPageList>totalRecordCount){lastPageNoOnPageList=totalPageCount} |
firstRecordIndex | 페이징 SQL의 조건절에 사용되는 시작 rownum | no | firstRecordIndex = (currentPageNo - 1) * recordCountPerPage |
lastRecordIndex | 페이징 SQL의 조건절에 사용되는 마지막 rownum | no | lastRecordIndex = currentPageNo * recordCountPerPage |
PaginationManager는 어떤 PaginationRenderer를 사용할지를 담당
( imageRenderer와 textRenderer가 있다. )
<!-- For Pagination Tag -->
<bean id="imageRenderer" class="com.easycompany.tag.ImagePaginationRenderer"/>
<bean id="textRenderer" class="egovframework.rte.ptl.mvc.tags.ui.pagination.DefaultPaginationRenderer"/>
<bean id="paginationManager" class="egovframework.rte.ptl.mvc.tags.ui.pagination.DefaultPaginationManager">
<property name="rendererType">
<map>
<entry key="image" value-ref="imageRenderer"/>
<entry key="text" value-ref="textRenderer"/>
</map>
</property>
</bean>
사용자가 페이징 JSP페이지에서 image를 사용 하고싶다면 아래와 같이 넣어 주면 된다.
<ui:pagination paginationInfo = "${paginationInfo}"
type="image"
jsFunction="linkPage"/>
text또한 큰차이 없이 type부분을 text로 변경하여 주기만 하면 된다.
PaginationRenderer는 포맷에 따라 페이징을 렌더링하는 역할을 담당
아래와 같이 기본적인 코드가 제공 된다.
package egovframework.rte.ptl.mvc.tags.ui.pagination;
public class DefaultPaginationRenderer extends AbstractPaginationRenderer {
public DefaultPaginationRenderer() {
firstPageLabel = "<a href=\"#\" onclick=\"{0}({1}); return false;\">[처음]</a> ";
previousPageLabel = "<a href=\"#\" onclick=\"{0}({1}); return false;\">[이전]</a> ";
currentPageLabel = "<strong>{0}</strong> ";
otherPageLabel = "<a href=\"#\" onclick=\"{0}({1}); return false;\">{2}</a> ";
nextPageLabel = "<a href=\"#\" onclick=\"{0}({1}); return false;\">[다음]</a> ";
lastPageLabel = "<a href=\"#\" onclick=\"{0}({1}); return false;\">[마지막]</a> ";
}
}
사용 방법 예시
위와 같이 예제 화면이 있다.
1. 페이징 SQL 작성하기 (MYSQL)
<select id="getAllEmployees" parameterClass="java.util.Map"
resultClass="com.easycompany.domain.Employee">
select employeeid,
name,
age,
departmentid,
password,
email
from employee
<dynamic prepend="WHERE">
<isNotEmpty prepend="and" property="searchEid">
employeeid = #searchEid#
</isNotEmpty>
<isNotEmpty prepend="and" property="searchDid">
departmentid = #searchDid#
</isNotEmpty>
<isNotEmpty prepend="and" property="searchName">
name like '%$searchName$%'
</isNotEmpty>
</dynamic>
order by CONVERT(employeeid,SIGNED)
limit #firstIndex#, #recordCountPerPage#
</select>
기분적인 동적 쿼리에 limit #firstIndex#, #recordCountPerPage# 을 추가하여 페이징 처리가 가능 하게 되어있다.
2. Controller 작성하기 (페이징처리담당)
package com.easycompany.controller.annotation;
...
import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo;
@Controller
public class EmployeeListContrller {
@Autowired
private EmployeeService employeeService;
@RequestMapping(value="/employeeList.do")
public String getEmpList(@RequestParam(value="pageNo", required=false) String pageNo, ....) throws Exception {
...
//PaginationInfo에 필수 정보를 넣어 준다.
PaginationInfo paginationInfo = new PaginationInfo();
paginationInfo.setCurrentPageNo(currentPageNo); //현재 페이지 번호
paginationInfo.setRecordCountPerPage(3); //한 페이지에 게시되는 게시물 건수
paginationInfo.setPageSize(8); //페이징 리스트의 사이즈
int firstRecordIndex = paginationInfo.getFirstRecordIndex();
int recordCountPerPage = paginationInfo.getRecordCountPerPage();
commandMap.put("firstIndex", firstRecordIndex );
commandMap.put("recordCountPerPage", recordCountPerPage );
List<Employee> employlist = employeeService.getAllEmployees(commandMap);
...
int employeeCount = employeeService.getEmployeeCount(commandMap);
paginationInfo.setTotalRecordCount(employeeCount); //전체 게시물 건 수
//페이징 관련 정보가 있는 PaginationInfo 객체를 모델에 반드시 넣어준다.
model.addAttribute("paginationInfo", paginationInfo);
return "employeelist";
}
}
3. 페이징 빈 설정
<!-- For Pagination Tag -->
<bean id="imageRenderer" class="com.easycompany.tag.ImagePaginationRenderer"/>
<bean id="textRenderer" class="egovframework.rte.ptl.mvc.tags.ui.pagination.DefaultPaginationRenderer"/>
<bean id="paginationManager" class="egovframework.rte.ptl.mvc.tags.ui.pagination.DefaultPaginationManager">
<property name="rendererType">
<map>
<entry key="image" value-ref="imageRenderer"/>
<entry key="text" value-ref="textRenderer"/>
</map>
</property>
</bean>
4. JSP
이코드는 페이징 1~10 ~~처럼 페이지 처리가 보여질 곳에 삽입을 하여주면 된다.
<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%>
...
<script type="text/javascript">
function linkPage(pageNo){
location.href = "/easycompany/employeeList.do?pageNo="+pageNo;
}
</script>
<body>
...
<ui:pagination paginationInfo = "${paginationInfo}"
type="image"
jsFunction="linkPage"/>
...
</body>
'코딩 > egovframework' 카테고리의 다른 글
[전자정부프레임] 에러 java.lang.ClassNotFoundException (0) | 2020.12.12 |
---|