JQuery

 

jqGrid의 경우 jQueryUI의 테마를 사용하기 때문에

 jQueryUI를 다운 및 연동을 우선적으로 연동한 후

jqGrid 다운을 받도록 합니다.

 

 

2014/11/04 - [웹개발강좌/jQueryUI] - jQueryUI 1장 - 테마선택하여 다운로드 후 간단하게 버튼태그에 UI 적용하기

 

 

jQueryUI에 대한 연동이 완료되었다면 

jqGrid 플러그인을 다운로드 받도록 합니다.

 

http://www.trirand.com/blog/?page_id=6

 

URL 접속 후 Download버튼을 클릭하여 jqGrid 압축파일을 다운받습니다.

스크롤을 내리면 하단과 같은 버튼이 존재 할 겁니다.

 

 

 

 

 

 

다운로드 파일을 압축 해제 후 존재하는 css/js/plugins/src 디렉토리를 

자신의 웹프로젝트에 "jqgrid" 디렉토리 생성 후 복사+붙여넣기를 합니다.

 

 

 

 

 

 

 

위에 파란줄친게 jqueryui관련 플러그인 include파일이고

 빨간줄을 jqgrid 관련 플러그인 include파일입니다.

 

index.html 이란 파일을 생성 후 연동을 해보도록 하겠습니다.



1. jqGrid 연동을 위한 include 코드

<link rel="stylesheet" type="text/css" media="screen" href="/jqueryui/jquery-ui.css" />
<link rel="stylesheet" type="text/css" media="screen" href="/jqgrid/css/ui.jqgrid.css" />
<script src="//code.jquery.com/jquery-1.11.0.min.js"></script>
<script src="/jqueryui/jquery-ui.js"></script>
<script src="/jqgrid/js/jquery.jqGrid.src.js"></script>


 

 

경로는 다를 수 있으니 자신의 경로에 맞춰서 include 해주세요

include를 해주셨다면 body 태그 사이에 그리드 출력을 위한 태그를 삽입해주세요

<table id="list"></table>

 

※ jqGrid를 이용하여 그리드 목록 출력시, table 태그를 이용해주어야 합니다.

 

 

2. 로컬데이터를 그리드에 출력을 위한 스크립트코드

$(function(){
        //가상의 local json data
        var gridData = [{seq:"1",create_date:"2007-10-01",create_name:"test",title:"note",hitnum:"11"},
                      {seq:"2",create_date:"2007-10-02",create_name:"test2",title:"note2",hitnum:"22"}];
         
        //jqGrid껍데기 생성
        $("#list").jqGrid({
            //로컬그리드이용
            datatype: "local",
            //그리드 높이
            height: 250,
            //컬럼명들
            colNames:['시퀀스','제목', '등록일', '등록자명','조회수'],
            //컬럼모델
            colModel:[
                {name:'seq'},
                {name:'title'},
                {name:'create_date'},
                {name:'create_name'},
                {name:'hitnum'}    
            ],
            //그리드타이틀
            caption: "그리드 목록"
        });
         
        // 스크립트 변수에 담겨있는 json데이터의 길이만큼
        for(var i=0;i<=gridData.length;i++){
                //jqgrid의 addRowData를 이용하여 각각의 row에 gridData변수의 데이터를 add한다
                $("#list").jqGrid('addRowData',i+1,gridData[i]);
        }
})



 

 

 

 

 

위 처럼 정상적으로 그리드내에 데이터가 출력된 것을 확인할 수 있습니다.

이어서 서버통신으로 그리드 데이터 호출을 해보도록 하겠습니다.

 

json 파싱하는부분은 저는 json-simple 라이브러리를 이용하여 예를 들도록 하겠습니다.

2014/10/06 - [코드저장소/java] - JSON 라이브러리를 이용하여 object생성과 문자열을 object형으로 변환해보기

기존 코드는 동일하고 스크립트 코드를 변경해보도록 하겠습니다.

 

 

3. Ajax 통신으로 그리드 데이터출력관련 스크립트

$(function(){
    $("#list").jqGrid({ 
        //ajax 호출할 페이지
        url:'/result.jsp',
        //로딩중일때 출력시킬 로딩내용
        loadtext : '로딩중..',
        //응답값
        datatype: "json",
        height: 250,
        colNames:['시퀀스','제목', '등록일', '등록자명','조회수'],
        colModel:[
            {name:'seq'},
            {name:'title'},
            {name:'create_date'},
            {name:'create_name'},
            {name:'hitnum'}    
        ],
        caption: "그리드 목록"
    });
})



 

일괄적으로 페이징 처리 없이 서버에서 

응답받은 데이터를 한꺼번에 출력시키는 방식입니다.

호출하는방식이 $.ajax와 흡사합니다.

 

그럼 jqGrid 속성중 url에 정의한 jsp페이지에서 json 파싱작업을 하도록 하겠습니다.

 

 

4. result.jsp 서버페이지 코드

JSONObject jsonObj = new JSONObject();
JSONObject jsonObj2 = null;
JSONArray jsonArray = new JSONArray();
 
//1번째 데이터
jsonObj2 = new JSONObject();
jsonObj2.put("seq", "1");
jsonObj2.put("title", "제목");
jsonObj2.put("create_date", "2014-11-11");
jsonObj2.put("create_name", "개발로짜");
jsonObj2.put("hitnum", "1");
jsonArray.add(jsonObj2);
 
//2번째 데이터
jsonObj2 = new JSONObject();
jsonObj2.put("seq", "2");
jsonObj2.put("title", "제목222");
jsonObj2.put("create_date", "2014-11-11");
jsonObj2.put("create_name", "개발로짜2323");
jsonObj2.put("hitnum", "10");
jsonArray.add(jsonObj2);
 
PrintWriter pw = response.getWriter();
pw.print(jsonArray);
pw.flush();
pw.close();


 

 json array 객체를 클라이언트 페이지로 넘겨 주었습니다.

맨처음 진행한 local 타입에 사용했던 json 변수와 동일한 구조로 넘겨준것 뿐입니다.

 

즉, gridData 변수의 담겨있던 json 데이터를 result.jsp 페이지로 이동(?) 된 것 뿐입니다.

 

추가로 그리드 페이징에 대하여 진행하겠습니다.

페이징UI 적용을 위한 DIV 태그를 추가하도록 합니다.

 

<div id="page"></div>


다음으로 스크립트 코드를 작성해보았습니다.

$(function(){
     $("#list").jqGrid({  
        url:'/result.jsp',
        datatype: "json",
                loadtext : '로딩중..',
        height : 250,
        //한페이지에 출력할 데이터 갯수
        rowNum : 2,
        //페이징UI적용을 위한 속성
        pager: '#page',
        colNames:['시퀀스','제목', '등록일', '등록자명','조회수'],
        colModel:[
            {name:'seq'},
            {name:'title'},
            {name:'create_date'},
            {name:'create_name'},
            {name:'hitnum'}     
        ],
        caption: "그리드 목록"
    });
})

 

기존 ajax 코드에서 2가지(rowNum,pager) 속성이 추가되었습니다.

 

rowNum : 한페이지당 몇개의 데이터를 출력할지

pager : 페이징UI 적용할 셀렉터

 

이어서 result.jsp 서버 코드를 변경해보도록 하겠습니다.

 

 

5. 페이징처리 예를들기위한 result.jsp 샘플코드

//현재페이지
String current_page = request.getParameter("page");
//한페이지에 최대 몇개의 row 출력(mysql의 limit에 속하는데이터)
String numper_page = request.getParameter("rows");
JSONObject jsonObj = new JSONObject();
JSONObject jsonObj2 = null;
JSONArray jsonArray = new JSONArray();
     
if(current_page.equals("1")) {
    jsonObj2 = new JSONObject();
    jsonObj2.put("seq", "1");
    jsonObj2.put("title", "제목");
    jsonObj2.put("create_date", "2014-11-11");
    jsonObj2.put("create_name", "개발로짜");
    jsonObj2.put("hitnum", "1");
    jsonArray.add(jsonObj2);
     
    jsonObj2 = new JSONObject();
    jsonObj2.put("seq", "2");
    jsonObj2.put("title", "제목2");
    jsonObj2.put("create_date", "2014-11-15");
    jsonObj2.put("create_name", "개발로짜");
    jsonObj2.put("hitnum", "20");
    jsonArray.add(jsonObj2);
} else if(current_page.equals("2")) {
    jsonObj2 = new JSONObject();
    jsonObj2.put("seq", "3");
    jsonObj2.put("title", "제목33");
    jsonObj2.put("create_date", "2014-11-11");
    jsonObj2.put("create_name", "개발로짜33");
    jsonObj2.put("hitnum", "8");
    jsonArray.add(jsonObj2);
     
    jsonObj2 = new JSONObject();
    jsonObj2.put("seq", "4");
    jsonObj2.put("title", "제목4444");
    jsonObj2.put("create_date", "2014-11-15");
    jsonObj2.put("create_name", "개발로짜12");
    jsonObj2.put("hitnum", "2");
    jsonArray.add(jsonObj2);
}
 
//현재페이지의 목록데이터
jsonObj.put("rows", jsonArray);
//현재페이지
jsonObj.put("page", current_page);
//총페이지수
jsonObj.put("total", 2);
//총글목록수
jsonObj.put("records", 4);
PrintWriter pw = response.getWriter();
pw.print(jsonObj);
pw.flush();
pw.close();



 

위 코드는 db처리 없이 임의로 current_page값 구분으로 

가상의 페이징처리로 데이터를 파싱 하였습니다.

 

그리고 페이징 처리시 데이터 목록의 json array 의 경우 rows 키에 담겨져야 하며

현재페이지(page), 총페이지수(total), 총글목록 카운트(records) 에 담아서 

클라이언트 페이지에 response 해주어야 합니다.

 

실행을 해보도록 하겠습니다.

 

 

 

 

 

 

위와같이 데이터 출력을 되었으나 로딩문구가 계속 출력되며 

하단 페이징화면도 제대로 나타나지 않습니다.

 

F12 를 눌러서 오류 메시지를 확인해 보았는데

 

 

 

 

 

 

"Uncaught TypeError: Cannot read property 'integer' of undefined"

 

라는 메시지 출력이 되었습니다.

 

페이징 처리를 위해서 LOCALE 설정을 잡아주지 않아서입니다.

 

jqgrid -> src 0> i18n 디렉토리 내에 자신의 원하고자 하는 locale 파일을 include 해주도록 합니다.

저같은 경우는 한글 locale 설정을 하므로 "grid.locale-kr.js" 파일을 include하였습니다.

 

 

 

?

1

<script src="/jqgrid/src/i18n/grid.locale-kr.js"></script>

 

 

 

다시 실행을 해보도록 하겠습니다.

 

 

그리드 1페이지 결과

 

 

 

 

 

 

그리드 2페이지 결과

 

 

 

 

 

실행결과 정상적으로 출력되네요 

 

즐거워

 

 

다음에 시간이 되면 컬럼 수정 및 기타 추가 기능에 대하여 포스팅 해보도록 하겠습니다.



출처: http://hellogk.tistory.com/83 [IT Code Storage]

 

 

 

 

 

 

 

 

 

about author

PHRASE

Level 60  라이트

차라리 아무 걱정이 없이 집이 가난할지언정 걱정이 있으면서 집이 부자가 되지 말 것이며, 차라리 걱정이 없이 초가에서 살지언정 걱정이 있으면서 좋은 집에서 살지 않을 것이며, 차라리 병이 없이 거친 밥을 먹을지언정 병이 있으면서 좋은 약은 먹지 말 것이다. -익지서

댓글 ( 4)

댓글 남기기

작성