AngularJS


Angular 튜토리얼을 그냥 하나씩 진행하겠습니다.  Jasmine 은 패스 


angular.js 및 정식 튜토리얼은 위 이미지 클릭 - API


역시나 IE는 쓰레기, IE7,8,9에서 작은(?) 문제가 있으며, 해결책은 맨아래





1.  값 바인딩


index.html

  1. <html ng-app>
  2. <head>
  3. ...
  4. <script src="lib/angular/angular.js"></script>
  5. <script src="js/controllers.js"></script>
  6. </head>
  7. <body ng-controller="PhoneListCtrl">
  8.  
  9. <ul>
  10. <li ng-repeat="phone in phones">
  11. {{phone.name}}
  12. <p>{{phone.snippet}}</p>
  13. </li>
  14. </ul>
  15. </body>
  16. </html>



controllers.js

  1. function PhoneListCtrl($scope) {
  2. $scope.phones = [
  3. {"name": "Nexus S",
  4. "snippet": "Fast just got faster with Nexus S."},
  5. {"name": "Motorola XOOM™ with Wi-Fi",
  6. "snippet": "The Next, Next Generation tablet."},
  7. {"name": "MOTOROLA XOOM™",
  8. "snippet": "The Next, Next Generation tablet."}
  9. ];
  10. }



동작 

심플!


<html> 태그에 ng-app 를 추가하여 angular application 이라고 선언해준다.


 그리고 컨트롤러가 적용될 태그에 ng-controller="PhoneListCtrl" 를 추가한다.


컨트롤러에 들어갈 값은 controllers.js 에 함수로 정의한 함수명이 그대로 사용된다. 

body가 refresh 등 어떤 이유로 변경되었을 경우에 지정한 컨트롤러가 날아가는데

그걸 방지하기위해 컨트롤러를 html 태그안에 선언해도 된다.



그다음 리스트류를 표현할때

li 에 다가 ng-repeat="phone in phones" 선언하면

foreach 나 each 처럼 사용이 된다.


 phones 를 $scope에 정의해주면

해당 컨트롤러의 scope 내에서 사용할 수 있다.




2. search


index.html

  1. <div class="container-fluid">
  2. <div class="row-fluid">
  3. <div class="span2">
  4. <!--Sidebar content-->
  5.  
  6. Search: <input ng-model="query123">
  7.  
  8. </div>
  9. <div class="span10">
  10. <!--Body content-->
  11.  
  12. <ul class="phones">
  13. <li ng-repeat="phone in phones | filter:query123">
  14. {{phone.name}}
  15. <p>{{phone.snippet}}</p>
  16. </li>
  17. </ul>
  18.  
  19. </div>
  20. </div>
  21. </div>



동작

ng-model="query123" 


이라고 input 에다가 선언을 하였습니다.


그럼 해당 input 에 입력되는 text는 query123 이라는 바인딩변수로 사용 할 수 있습니다.


문서 아무곳이나 <div> {{query123}} </div> 라고 해놓았다면


input 에 글자를 입력되는 순간 저 div 에도 동일하게 해당 text가 나오게 됩니다. 


돌아가서 13라인에 필터라고 선언하고 query123을 지정했습니다.


그러면 글자가 입력되는 순간 해당 li에 모든 텍스트중 동일한 글자가 있는지를 검색하여


동일한 글자가 있는 li만 리스트에 보여주게 됩니다.


만약 phone.name 이나, phone.snippet 어느 하나에만 적용하고 싶을때는 


ng-model = "query123.name"  이나 query123.snippet 으로 해주시고 필터에는 그냥 query123 그대로 주면


해당 값에만 필터가 걸립니다.


만약 10개중 2개에서만 필터를 하고 싶을경우는


해당 controller.js 에


 $scope.queryFilter = function(list){

 return list.name.toLowerCase().search($scope.query) != -1

        || list.snippet.toLowerCase().search($scope.query) != -1;

  }


아래와 같이 합니다. 대소문자 구분을 짓고싶으면 toLowerCase 를 빼면되겠죠






3. Sort


index.html

  1. Search: <input ng-model="query">

  2. Sort by:
  3. <select ng-model="orderProp">
  4. <option value="name">Alphabetical</option>
  5. <option value="age">Newest</option>
  6. </select>
  7.  
  8.  
  9. <ul class="phones">
  10. <li ng-repeat="phone in phones | filter:query | orderBy:orderProp">
  11. {{phone.name}}
  12. <p>{{phone.snippet}}</p>
  13. </li>
  14. </ul>



controllers.js

  1. function PhoneListCtrl($scope) {
  2. $scope.phones = [
  3. {"name": "Nexus S",
  4. "snippet": "Fast just got faster with Nexus S.",
  5. "age": 0},
  6. {"name": "Motorola XOOM™ with Wi-Fi",
  7. "snippet": "The Next, Next Generation tablet.",
  8. "age": 1},
  9. {"name": "MOTOROLA XOOM™",
  10. "snippet": "The Next, Next Generation tablet.",
  11. "age": 2}
  12. ];
  13.  
  14. $scope.orderProp = 'age';
  15. }



동작

이번엔 select 에다가 ng-model 을 선언했습니다.


그러면 선택되는 option 의 value가 model의 값이 됩니다.


그러면 index.html 의 11 라인 orderBy:orderProp"  으로 선언해주면 


해당 리스트는 선택된 orderProp 의 값 name, age 중 하나로 정렬하게 됩니다.


controllers.js에 key 인 name과 age중 하나를 선택하게 됩니다.


14라인에서 값을 'age'로 주고 있습니다.


그러면 select box는 해당 값으로 선택이 되어 있는 상태로 렌더링되고, 리스트도 적용되어 보이게 됩니다.






4. XHR


phones.json

  1. [
  2. {
  3. "age": 13,
  4. "id": "motorola-defy-with-motoblur",
  5. "name": "Motorola DEFY\u2122 with MOTOBLUR\u2122",
  6. "snippet": "Are you ready for everything life throws your way?"
  7. ...
  8. },
  9. ...
  10. ]


controllers.js

  1. function PhoneListCtrl($scope, $http) {
  2. $http.get('phones/phones.json').success(function(data) {
  3. $scope.phones = data;
  4. });
  5.  
  6. $scope.orderProp = 'age';
  7. }
  8.  
  9. //PhoneListCtrl.$inject = ['$scope', '$http'];



동작

$http.get 으로 파일을 가져오고 있습니다. 

다른메소드로는

$http.get, $http.head$http.post$http.put$http.delete$http.jsonp 가 있습니다. API 참조하세요 


그리고 controllers.js 에 주석처리된 놈은 Depedency Injection입니다.

원하면 컨트롤러에 직접 필요한 인자를 집어넣어 줄 수 있습니다.


그리고 controllers.js 라인 3 - data를 


$scope.phones = data.splice(0, 5);


같이 원하는만큼만 넣으셔도됩니다.


계속 됩니다.




※ IE 에서 바인딩이 되지 않고, 그대로 {{name}} 이 나올 때,JSON.strigify 가 안되거나, 

     등등의 문제를 위한 작은 해결책


1. doctype이 저렇게 되어있지않다면 바꿔보세요.

<!doctype html>


2.

<html lang="en" class="ng-app:myapp" id="ng-app" ng-app="myapp" xmlns:ng="http://angularjs.org">

     <head>    

        <!--[if lt IE 9]>

          <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>

        <![endif]-->

        <!--[if lte IE 8]>

          <script>

            document.createElement('ng-include');

            document.createElement('ng-pluralize');

            document.createElement('ng-view');

            document.createElement('ng:include');

            document.createElement('ng:pluralize');

            document.createElement('ng:view');

          </script>

        <![endif]-->

        <!--[if lt IE 8]>

          <script src="js/json2.js"></script>

        <![endif]-->

      </head>


'Javascript > AngularJS' 카테고리의 다른 글

[tutorial] AngularJS 튜토리얼 - 1  (0) 2013.01.03
YOUR COMMENT IS THE CRITICAL SUCCESS FACTOR FOR THE QUALITY OF BLOG POST



안드로이드 웹뷰에서 단말기정보나 단말기 기능이 필요할때 


자바스크립트에서 메소드 호출형식으로 


네이티브 코드에 정의해놓은 메소드를 불러다 쓸 수 있다.




코드 - Android Native Code

public class Test extends Activity {

    /** Called when the activity is first created. */

    WebView webView ; 

    WebSettings wSet; 

    String HOME_URL = this.getResources().getString(R.string.homeURL);

    @Override

    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.main);

     

   webView = (WebView)findViewById(R.id.webview);

        wSet = webView.getSettings(); 

     

webView.addJavascriptInterface(new JavaScriptInterface(this.getApplicationContext()

, webView

, HOME_URL

)

, "margoScript" // 웹뷰 자바스크립트에서 쓸 메소드명

);



- JavaScriptInterface Class

public class JavaScriptInterface {


Context context;

String phoneNum;

String udid;

WebView webView ;

String url;

public JavaScriptInterface(Context context, WebView webView, String url) {

this.context = context;

this.webView = webView;

this.url = url;

}

public String getUdid(){

TelephonyManager tm = 

(TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE);

phoneNum = tm.getLine1Number();

udid = android.provider.Settings.Secure.getString(context.getContentResolver()

, Settings.Secure.ANDROID_ID);

return udid;

}

public void resetAndHome(){

webView.clearHistory();

}

}



- WebView Javascript

완전 간단하다 그냥 편하게 불러쓰자. 값을 넘겨 호출 할 수도 있다.


function getUdid(){

 

return window.margoScript.getUdid();

}

YOUR COMMENT IS THE CRITICAL SUCCESS FACTOR FOR THE QUALITY OF BLOG POST



Node JS 에서 MySql 을 이용해서 작업하는데


DateTime 타입인 컬럼에 값이 '2010-10-10 20:20:00'  라고 입력이 되어 있는데


이 값을 꺼내서 쓸라고 보니까 'Wed, 04 Jul 2012 02:06:00 GMT'  요딴 식으로 튀어 나오네...젠장


분명히 시간이 틀려졌다...20시 20분인데 꺼내서 보니까 02:06 이다.


저거를 한국 시간으로 바꾸자



코드

var _date = new Date(new Date(resultList[i].meetTime).toLocaleString();)


이제 이 값을 아래 메소드로 빼 쓰면 된다.


getFullYear()


d.getMonth() + 1 // 달은 +1 을 해줘야 된다.


d.getDate()


d.getHours()


d.getMinutes()


d.getSeconds()


더 쉬운 방법을 아시는 분은 좀 가르쳐주세요 ㅎㅎ

YOUR COMMENT IS THE CRITICAL SUCCESS FACTOR FOR THE QUALITY OF BLOG POST



노드에서 EventEmitter 를 이용하여 이벤트 방식으로 


웹 서버에서 라우트하는 코드에서


디비작업을 하는 코드를 분리하여, 의존성을 제거하고 비동기 처리 방법.


express 를 사용하였습니다.



1. 서버 js

var express = require('express')

  , routes = require('./routes') // 기본 index.js

  , pp = require('./public/properties').properties

  , clog = require('clog');


var app = module.exports = express.createServer();


.............. 설정들



app.post('/searchArea.margo', routes.searchArea);



2. Route - index.js

var dao = require('./db'); // routes/db.js 

exports.searchArea = function(req, res){

var cb = dao.getArea(req.body);

cb.on('end', function(err, result){

if(err) throw err;

res.send(result);

});

};



3. DB - db.js
(MySql을 사용하였습니다.)

var db = require('mysql');


var DATABASE = '데이타베이스 명';

var MYSQL_USER = "root";

var MYSQL_PASS = "apmsetup"; 


var mysql = db.createClient({

host: '127.0.0.1'

, database : DATABASE

, user: MYSQL_USER

    , password: MYSQL_PASS

});


var EventEmitter = require('events').EventEmitter;


var dao = module.exports = {


getArea: function(param){

var evt = new EventEmitter();

mysql.query("SELECT * FROM address WHERE area3 like concat(?, '%')"

, [param.searchText]

, function(err, result, fields){


evt.emit('end', err, result);

});

return evt;

}

};



설명

3번 에서 EventEmitter 를 생성하여 디비쿼리를 실행시킨후에 evt 를 리턴한다. (쿼리는 아직 끝나지않았다. 쿼리를 실행만 시켜놓고 바로 evt를 리턴해버린다.)


2번 에서 cb 는 3번에서 리턴해준 evt 에 on 리스너를 달아서 아까 발생시킨 'end' 이벤트를 기다린다.


디비 쿼리 작업이 다끝나고 디비결과가 콜백메소드로 들어오면 'end'이벤트를 발생시킨다. res.send(result);


그러면 2번에서 'end'이벤트에 달았던 리스너가 동작하면서 리스너 콜백이 실행된다.


끝. 즐거운 NodeJS~~~~ 


참고 : 변정훈님이 지으신 NODE.JS 프로그래밍 - 에이콘 출판사

YOUR COMMENT IS THE CRITICAL SUCCESS FACTOR FOR THE QUALITY OF BLOG POST
  1. 로즈 2012.07.11 14:14 신고  댓글주소  수정/삭제  댓글쓰기

    와 감사합니다.. 도움이 많이 됬어요...

    코멘트 잘 안 다는데.. 너무 재밌게 잘보고 가게되서 몇자 적었네요.. ^^



출처 : http://blog.naver.com/PostView.nhn?blogId=leeyc09&logNo=30104364339


  

 

[JQuery Mobile] listview Accordion Plug In

jQuery : jquery-1.5
jQuery Mobile : jquery.mobile-1.0a3

Copyright (c) Boris Smus (original) : http://forum.jquery.com/topic/listview-accordion-plugin
Copyright (c) Lee Young Chan (modify) : http://forum.jquery.com/topic/jquery-mobile-listview-accordion-plugin-to-use-with-list-divider-role-optional

 

최초 소스 제공자인 보리스에게 감사를 드리며 내가 조금 수정 및 보안을 해 보았다.

 

기존의 소스에서는 기본적인 list-view에서만 사용이 가능 한 것을 list-divider 스타일에도 사용 할 수 있도록 수정 하였다.

 

list-divider 사용 시 Header 를 클릭하면 펼침목록이 나온다.

 

list-divider 스타일을 사용하고 싶지 않다면 ui 에서 data-rule='list-divider' 를 삭제하면 된다.

 

Padding CSS 가 남아 있어 펼쳐지기 전에 목록이 보이던 현상도 같이 수정 했으며

 

Silde 효과가 들어 있었으나 모바일 환경에서는 속도저하 현상을 보여 제거 하였다.

 

 

 

다운로드 받으 실 땐 덧글 좀 남겨주세요 :)



근데 이놈을 쓰다보면 문제가 하나있다.


펼쳐지는놈의 크기만큼 늘어나야하는데 크기가 고정이라서


크기보다 내용이 많은 경우에는 다짤려버린다.


css 에서 고쳐주면 크기가 자동으로 잘 지정된다.


.ui-li-accordion { 

height:inherit;

background-color: transparent;

display: none; 

position: relative;}


제가 따로 파일로 배포하지는 않겠습니다. 최상단 출처 링크로 가셔서 받으세요.

YOUR COMMENT IS THE CRITICAL SUCCESS FACTOR FOR THE QUALITY OF BLOG POST


제이쿼리에서 잘 쓰는 DatePicker처럼 다른녀석이 있다.


DataBox 라는 놈인데 이놈도 쓸만하다.


안드로이드에서 밖에 안써봤지만, flip 모드는 퍼포먼스가 최악이다. 기대하지말라.


요게 필요하다.

<link type="text/css" href="http://dev.jtsage.com/cdn/datebox/latest/jquery.mobile.datebox.min.css" rel="stylesheet" /> 

 <link type="text/css" href="http://dev.jtsage.com/cdn/simpledialog/latest/jquery.mobile.simpledialog.min.css" rel="stylesheet" /> 


 <script type="text/javascript" src="http://dev.jtsage.com/jquery.mousewheel.min.js"></script>

 <script type="text/javascript" src="http://dev.jtsage.com/cdn/datebox/latest/jquery.mobile.datebox.min.js"></script>

 <script type="text/javascript" src="http://dev.jtsage.com/cdn/simpledialog/latest/jquery.mobile.simpledialog.min.js"></script>

 <script type="text/javascript" src="http://dev.jtsage.com/gpretty/prettify.js"></script>

 <script type="text/javascript" src="http://dev.jtsage.com/cdn/datebox/i18n/jquery.mobile.datebox.i18n.ko.utf8.js"></script>

 ↑ 요놈은 한글로 변환시켜주는놈

 <link type="text/css" href="http://dev.jtsage.com/gpretty/prettify.css" rel="stylesheet" />



코드

날짜 

<input type="date" data-role="datebox" data-theme='a' name="meetDay" id="meetDay" readonly

    placeholder="날짜 선택" data-options='{"mode": "flipbox","headerFormat": "날짜 선택"}' />


시간

<input name="meetTime" id="meetTime" data-theme='a' type="date" data-role="datebox" readonly

placeholder="시간 선택" data-options='{"mode": "timeflipbox", "headerFormat": "시간 선택"}'>



참고 : http://dev.jtsage.com/jQM-DateBox/


YOUR COMMENT IS THE CRITICAL SUCCESS FACTOR FOR THE QUALITY OF BLOG POST


Textarea fields

$('body').prepend('<textarea id="myTextArea"></textarea>');
$('#myTextArea').textinput();

Text input fields

$('body').prepend('<input type="text" id="myTextField" />');
$('#myTextField').textinput();

Buttons

$('body').append('<a href="" data-theme="e" id="myNewButton">testing</a>');
$('#myNewButton').button();

Combobox or select dropdowns

<label for="sCountry">Country:</label>
<select name="sCountry" id="sCountry">
<option value="">Where You Live:</option>
<option value="ad">Andorra</option>
<option value="ae">United Arab Emirates</option>
</select>

var myselect = $("#sCountry");
myselect[0].selectedIndex = 3;
myselect.selectmenu('refresh');

Listviews

<ul id="myList" data-role="listview" data-inset="true">
<li>Acura</li>
<li>Audi</li>
<li>BMW</li>
</ul>

$('#mylist').listview('refresh');

Slider control

<div data-role="fieldcontain">
<label for="slider-2">Input slider:</label>
<input type="range" id="slider-2" value="25" min="0" max="100" />
</div>

$('#slider-2').val(80).slider('refresh');

Toggle switch

<div data-role="fieldcontain">
<label for="toggle">Flip switch:</label>
<select name="toggle" id="toggle" data-role="slider">
<option value="off">Off</option>
<option value="on">On</option>
</select>
</div>

var myswitch = $("#toggle");
myswitch[0].selectedIndex = 1;
myswitch .slider("refresh");

Radio buttons

<div data-role="fieldcontain">
    <fieldset data-role="controlgroup" data-type="horizontal">
      <legend>Layout view:</legend>
          <input type="radio" name="radio-view" value="list" />
          <label for="radio-view-a">List</label>
          <input type="radio" name="radio-view" value="grid" />
          <label for="radio-view-b">Grid</label>
          <input type="radio" name="radio-view" value="gallery" />
          <label for="radio-view-c">Gallery</label>
    </fieldset>
</div>

$("input[value=grid]").attr('checked',true).checkboxradio('refresh');

Checkboxes

<div data-role="fieldcontain">
<fieldset data-role="controlgroup">
<legend>Agree to the terms:</legend>
<input type="checkbox" name="checkbox-1" id="checkbox-1" class="custom" />
<label for="checkbox-1">I agree</label>
</fieldset>
</div>

$('#checkbox-1').attr('checked',true).checkboxradio('refresh');


출처 : http://www.andyMatthews.net


YOUR COMMENT IS THE CRITICAL SUCCESS FACTOR FOR THE QUALITY OF BLOG POST


페이지 전환시에 로딩대화창이 수동으로 띄울때 스크립트에서


$.mobile.pageLoading(); 하면  has no method 뜬다.....


버전업 되면서 저놈이 없어지고


$.mobile.showPageLoadingMsg("a", "Loading theme a...");


이놈으로 대체되었다. 


첫번째 인자는 theme 이고, 두번째는 메세지이다.


끌때는 $.mobile.hidePageLoadingMsg();



YOUR COMMENT IS THE CRITICAL SUCCESS FACTOR FOR THE QUALITY OF BLOG POST




NodeJS - express 프레임웍에서 템플릿 엔진(EJS)을 이용하여 View 페이지로 JSON 객체를 넘겨줄 때, 


값이 제대로 넘어 가지 않고, 


스크립트 에러가 나거나, 값이 [Object, Object] 형식으로 제대로 나오지 않는 경우가 있다.


스크립트 에러는 "Uncaught SyntaxError: Unexpected identifier" 이런식으로 나고, 


"[object Object],[object Object],[object Object],[object Object],[object Object]," 이런식으로 JSON이 제대로


전달 되지 않는다.


JSON 객체는 보통 스트링 넘기듯이 넘기면 안된다.




NodeJS - Server Page


res.render('search/bbsList',{ result: JSON.stringify(result)

, caller:req.body.caller});


DB나 어떤 JSON 객체를  넘겨줄 때는 저런식으로 JSON.stringify 로 넘겨주어야한다.




NodeJS - View Page(EJS)


템플릿 엔진 옵션은 

open: '#{',

   close: '}'


보통 값을 불러올때는 #{= xxx} 이런식으로 불러오지만


json객체를 저런식으로 부르면 


{&quot;lastname&quot;: &quot; 


위와같은 값이 나오게 된다.


JSON 객체를 불러올 때는 


var resultList = #{-result};


이렇게 '=' 이 아닌 '-' 로 호출해야한다. 끝.


YOUR COMMENT IS THE CRITICAL SUCCESS FACTOR FOR THE QUALITY OF BLOG POST
  1. ㅜㅜ; 2012.10.28 17:11 신고  댓글주소  수정/삭제  댓글쓰기

    어제부터 json을 봐도 뭐가뭔지 짐작이안오네여 ㅠㅠ;; 혹시 node.js json에대한 소스예제는 없나요?

  2. 오호 2016.03.31 17:01 신고  댓글주소  수정/삭제  댓글쓰기

    도움이 많이 되었습니다! 근데 역으로 express 프레임웍에서 템플릿 엔진(EJS)을 이용하여 서버페이지에 json object를 넘겨줄땐 어찌 해야 할까요??



Json 데이터타입으로 jqGrid 를 만들어 보자.  - 초보용(저도 잘몰라요 ㅠㅠ)


필수 데이터 [

String page : 현재 페이지

String total : rows에 의한 총 페이지수

String records : 보여지는 데이터 개수


List rows [

{

String id : jqGrid 내부적으로 쓰이는 id값

List cell : 각 row 에 들어가는 column의 개수와 순서에 맞게 배열

},

{

String id : jqGrid 내부적으로 쓰이는 id값

List cell : 각 row 에 들어가는 column의 개수와 순서에 맞게 배열

},

...............................

]

]


위 데이터들은 컨트롤러에서 필수적으로 만들어져야한다.




뷰페이지


jQuery('#list1').jqGrid({

url:"/jqgrid.do"

,datatype:"json"

,loadError:function(){alert("Error~!!");}

,colNames:['번호', '이름', '등록 날짜', '제 목', '조회수', '댓글', '게시글번호']

,colModel:[

          {name:"id", index:'id', width:60, align:'center'}

          ,{name:"registerId", index:'registerId', width:60, align:'center'}

          ,{name:"registDatetime", index:'registDatetime', width:60, align:'center'}

          ,{name:"postTitle", index:'postTitle', width:400, align:'center'}

          ,{name:"readCnt", index:'readCnt', width:60, align:'center'}

          ,{name:"replyCnt", index:'replyCnt', width:60, align:'center'}

          ,{name:"postNo", index:'postNo', width:60, align:'center'}

          ]

,rowNum:10

,autowidth: false

,rowList:[10,20,30]

,pager: jQuery('#nav')

,sortname: 'id'

,viewrecords: true

,sortorder:'desc'

,width: 760

,height: '100%'

,onSelectRow: function(id){

alert(id);

}

,hidegrid: false

,caption: '마고 그리드'

});

<table id="list1"></table>

<div id="nav"></div>

---------------------------------------------------------------------------------------------

호출할 때 jqGrid 가 알아서, page 와 rows의 값을 던지나 보다. 

컨트롤러에서 꺼내면 첫 호출때는 page=1, rows= 저기위에 rownum 에 준 값


pager는 페이지네비게이션을 자동으로 만들어준다.







데이터 

MargoList returnList = new MargoList();
		List> dbList = null;
					
		try {
			dbList = bbsService.getBbsList(map);
		} catch (ServiceException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		int listSize = dbList.size();
				
		if(listSize > 0){
			
			int page = Integer.parseInt(request.getParameter("page"));
			int rows = Integer.parseInt(request.getParameter("rows"));
			
			long totalRow = Long.parseLong(dbList.get(0).get("total"));
			double totalPage;
			
			if(totalRow > 0){
				totalPage = Math.ceil(totalRow/rows) + 1;
			}else{
				totalPage = 0;
			}
			
			returnList.setTotal(totalPage + "");
			returnList.setPage(page + "");		
			returnList.setRecords(dbList.size() + "");
			
			List setMargoCell = new ArrayList();
			
			for(int i = 0; i < listSize; i++){
				
				map = dbList.get(i);
				
				List cellList = new ArrayList();
				
				MargoCell cell = new MargoCell();
				
				cell.setId((i+1)+"");
				
				cellList.add((i+1)+"");
				cellList.add(map.get("registerId"));
				cellList.add(map.get("registDatetime"));
				cellList.add(map.get("postTitle"));
				cellList.add(map.get("readCnt"));
				cellList.add(map.get("replyCnt"));
				cellList.add(map.get("postNo"));
				cellList.add(map.get("deleteStatus"));
				
				cell.setCell(cellList);
				setMargoCell.add(cell);
			}
			returnList.setRows(setMargoCell);
		}
		return returnList;




YOUR COMMENT IS THE CRITICAL SUCCESS FACTOR FOR THE QUALITY OF BLOG POST
  1. 오세욱 2015.03.25 15:01 신고  댓글주소  수정/삭제  댓글쓰기

    이거 소스좀 받을수 있을까요?

  2. 1 2016.07.22 09:27 신고  댓글주소  수정/삭제  댓글쓰기

    안녕하세요. 이거 혹시 소스 보내주실수 있으신지요(yp.cho@halla.com