0126 개발일지
오늘 한 일
과제
1. ajax 받은 결과로 직접 페이징 ui 만들어줌
2. 검색어 입력 후 검색 시 현재 선택된 페이지 번호 유지되는 오류 수정
페이징 동적 생성
인물 정보를 가지고 테이블을 동적으로 생성하는 부분은 구현했는데, 페이징 부분은 전자정부프레임워크에서 제공하는 <ui:pagination>
이라는 태그를 이용하고 있어서 어떻게 해야될지 고민이었다. 원래 저 태그에는 paginationInfo
라는 속성이 있어 controller에서 받은 paginationInfo 객체를 전달해주면 어디선가 자동으로 변환되어 html에는 onclick function을 가진<a>
가 된다. 그런데 javascript에서 html 생성할 때는 그 태그를 그대로 사용할 수 없었다.
<!-- 기존 paging 태그 -->
<div id="paging_wrap">
<div id="paging" class="paging">
<ui:pagination paginationInfo = "${paginationInfo}" type="customRenderer" jsFunction="fn_egov_link_page" />
<form:hidden path="pageIndex" />
</div>
</div>
ajax에서 paginationInfo 객체는 받을 수 있기 때문에, paginationInfo 객체의 정보를 이용해 <a>
태그를 만들어주는 부분은 직접 구현하기로 했다. 전자정부프레임워크에서는 PaginationInfo
라는 클래스를 제공하고 있다. 그걸 열어보면 아래와 같다.
/*
* Required Fields: 사용자가 입력해야 하는 필드값이다.
* currentPageNo : 현재 페이지 번호.
* recordCountPerPage : 한 페이지당 게시되는 게시물 건 수.
* pageSize : 페이지 리스트에 게시되는 페이지 건수.
* totalRecordCount : 전체 게시물 건 수.
*
* Not Required Fields : 사용자가 입력한 Required Fields 값을 바탕으로 계산하여 정해지는 값이다.
* totalPageCount: 페이지 개수.
* firstPageNoOnPageList : 페이지 리스트의 첫 페이지 번호.
* lastPageNoOnPageList : 페이지 리스트의 마지막 페이지 번호.
* firstRecordIndex : 페이징 SQL의 조건절에 사용되는 시작 rownum.
* lastRecordIndex : 페이징 SQL의 조건절에 사용되는 마지막 rownum.
*/
이 중 페이징 태그를 만들기 위해서 페이지 리스트의 첫 페이지 번호 firstPageNoOnPageList
와 페이지 리스트의 마지막 페이지 번호 lastPageNoOnPageList
를 이용해서 반복문을 만들었다. 안에 들어가는 <a>
태그는 기존 CustomPaginationRenderer
에서 사용하던 코드를 가져와서 수정해주었다.
$paging_text ="";
$('#paging_wrap>#paging').empty(); // 페이징 비우기
for (var page = pageInfo.firstPageNoOnPageList; page <= pageInfo.lastPageNoOnPageList; page++) {
// 현재 페이지 여부에 따라 css 클래스 및 onclick function 다름
if (page === pageInfo.currentPageNo) {
$paging_text += "<a href=\"#\" class=\"num_on\">" + page + "</a> ";
} else {
$paging_text += "<a href=\"#\" class=\"num\" onclick=\"fn_egov_link_page(" + page + "); return false;\">" + page + "</a> ";
}
}
검색 시 페이징 오류 수정
이전 검색 결과에서 1이 아닌 다른 페이지 번호를 선택한 상태에서 새로운 키워드로 검색하면 페이징 번호가 선택된 채로 쿼리를 진행하는 오류가 있어 '검색' 버튼 클릭 시, '초기화'버튼 클릭 시 전부 페이지 번호를 1로 초기화해주었다.
그리고 키워드 검색 및 페이징 시 ajax로 데이터 호출하는 부분의 코드가 중복되서 별도 함수로 분리해주었다.
/* 검색 초기화 버튼 */
function fn_egov_reset() {
document.listForm.reset();
$("#pageIndex").attr('value', "1");
}
/* 사용자 목록 화면 function */
function fn_egov_selectUserList() {
$("#pageIndex").attr('value', "1");
call_ajax();
}
/* pagination 페이지 링크 function */
function fn_egov_link_page(pageNo){
// 선택한 페이지 번호 저장
$("#pageIndex").attr('value', pageNo.toString());
call_ajax();
}
/* ajax로 인물 목록 및 페이징 정보 받기 */
function call_ajax() {
$.ajax({
type : 'POST',
data : $("#listForm").serialize(),
datatype : 'json',
url : "<c:url value='/selectUserListAjax.do?'/>",
success: function(result) {
updateUserTable(result.paginationInfo, result.empList);
},
error : function(error) {
console.log("code:"+request.status+"\n"+"message:"+request.responseText+"\n"+"error:"+error);
}
})
}
정보처리기사
애플리케이션 테스트 관리 관련 영상 3개
Author And Source
이 문제에 관하여(0126 개발일지), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@lee_yesol421/0126-개발일지저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)