2012-01-12 4 views
1

jqGridとJsonについて質問があります。JSQでjqGridでページャーが正常に動作しない

これはjqueryののコードで私のJSPファイルのコードです:

<body > 

    <script type="text/javascript"> 
     jq(function() { 
      jq("#grid").jqGrid({ 
       url:'/test-security-client/crud', 
       datatype: 'json', 
       mtype: 'GET', 
       colNames:['Id', 'Log Message'], 
       colModel:[ 
        {name:'id',index:'id', width:55,editoptions:{readonly:true,size:10},hidden:true}, 
        {name:'logMsg',index:'logMsg', width:300,editable:true, editrules:{required:true}, editoptions:{size:10}} 
       ], 
       rowNum:20, 
       rowList:[20,40,60], 
       height: 450, 
       autowidth: true, 
       rownumbers: true, 
       pager: '#pager', 
       sortname: 'id', 
       viewrecords: true, 
       sortorder: "asc", 
       caption:"Error Logs", 
       emptyrecords: "Empty records", 
       loadonce: false, 
       loadComplete: function() { 
       }, 
       jsonReader : { 
        root: "rows", 
        page: "page", 
        total: "total", 
        records: "records", 
        repeatitems: false, 
        cell: "cell", 
        id: "id" 
       } 
      }); 

      jq("#grid").jqGrid('navGrid','#pager', 
        {edit:false,add:false,del:false,search:false}, 
        { }, 
        { }, 
        { }, 
        { 
         sopt:['eq', 'ne', 'lt', 'gt', 'cn', 'bw', 'ew'], 
         closeOnEscape: true, 
          multipleSearch: true, 
          closeAfterSearch: true } 
      ); 

      jq("#grid").navButtonAdd('#pager', 
       { caption:"Delete", 
        buttonicon:"ui-icon-trash", 
        onClickButton: deleteRow, 
        position: "last", 
        title:"", 
        cursor: "pointer" 
       } 
      ); 

      jq("#btnFilter").click(function(){ 
       jq("#grid").jqGrid('searchGrid', 
         {multipleSearch: false, 
          sopt:['eq']} 
       ); 
      }); 

     }); 
    </script> 
    ... 

そして、これは私が送りますJSONです:HERE

{"total":"2","page":"1","records":"28","rows":[{"id":1,"logMsg":"ID of log:1-Requesting authentication. (SMA/SmaAdmin/password)"},{"id":2,"logMsg":"ID of log:2-Authentication received."},{"id":3,"logMsg":"ID of log:3-Test"},{"id":4,"logMsg":"ID of log:4-Test 2"},{"id":5,"logMsg":"ID of log:5-Test 3"},{"id":6,"logMsg":"ID of log:6-Test 4"},{"id":7,"logMsg":"ID of log:7-Test 5"},{"id":8,"logMsg":"ID of log:8-Test 6"},{"id":9,"logMsg":"ID of log:9-Test 7"},{"id":10,"logMsg":"ID of log:10-Test 8"},{"id":11,"logMsg":"ID of log:11-Test 9"},{"id":12,"logMsg":"ID of log:12-Test 10"},{"id":13,"logMsg":"ID of log:13-Test 11"},{"id":14,"logMsg":"ID of log:14-Test 12"},{"id":15,"logMsg":"ID of log:15-Test 13"},{"id":16,"logMsg":"ID of log:16-Test 14"},{"id":17,"logMsg":"ID of log:17-Test 15"},{"id":18,"logMsg":"ID of log:18-Test 16"},{"id":19,"logMsg":"ID of log:19-Test 17"},{"id":20,"logMsg":"ID of log:20-Test 18"},{"id":21,"logMsg":"ID of log:21-Test 19"},{"id":22,"logMsg":"ID of log:22-Test 20"},{"id":23,"logMsg":"ID of log:23-Test 21"},{"id":24,"logMsg":"ID of log:24-Test 22"},{"id":25,"logMsg":"ID of log:25-Test 23"},{"id":26,"logMsg":"ID of log:26-Test 24"},{"id":27,"logMsg":"ID of log:27-Test 25"},{"id":28,"logMsg":"ID of log:28-Test 26"}]} 

は、私の質問です:このコードはありますjqgridがうまく表示され、すべての情報がうまくいきます。しかし、ページャーはうまく動作していません。なぜなら、私はページ間を移動することができないからです。 (私は2ページあり、ページ番号1でjqGridを開始しますが、番号2に行くことはできません)。

loadonceプロパティをtrueに変更すると、動作しています。しかし、私はこのプロパティを使用したくないし、すべてのレコードが間違った位置に来ている。

私はJSONが正しいと理解しており、コードが正しいと私は間違っていることを知りません。 (私はjqGridとJQueryの新機能です)。私はページャに1種類の問題があると思います。

私が間違っていることはありますか?各ページの情報をJsonに送信する必要がありますか?

答えて

2

JSONはJSONと同じですが、jqGridによって要求されたデータには対応していません。これを説明しましょう。

rowNum: 20sortname: 'id'sortorder: "asc"です。最初(グリッドの最初の塗りつぶし時)に、jqGridはサーバーのURL '/test-security-client/crud'page=1&rows=20&sidx=id&sord=ascの最後のアドレス/test-security-client/crud?page=1&rows=20&sidx=id&sord=ascを送信します。これは、サーバーからの応答ではidでソートされた結果セットの最初の20個のアイテムだけをに含める必要があることを意味します。したがって、idsidx=idsord=asc - ORDER BY idを参照)で設定した結果をソートして、ページのサイズが20( - SELECT (TOP 20))の最初のページ(page=1)を取得する必要があります。

サーバーからの現在の応答には、28個の結果セットがすべて含まれています。最初のページは重要ではありませんが、2番目のページのリクエストに応じて、最後の8個のアイテムだけでなく、同じ28個のアイテムが含まれていると思われます(ソートは正しい8個のアイテムを取得するために非常に重要です)。

サーバーコードで問題を解決する場合、グリッドはページの変更時に正しいデータを表示します。

+0

私はあなたが正しいと思います。ありがとう!説明のために。今私は自分の誤りを理解している。私は解決策を実装し、私が行ったことの例を投稿します。しかし、そうです... JSONは正しいですが、JSONのデータは大変です。私はそのページのレコードだけを各ページに送るべきです。再度、感謝します。 – Juano7894

+1

私はすでに問題を解決しています。そして、私はこの問題を解決する良い方法を説明する非常に良いチュートリアルを見つけました。だから私は私のコードを投稿するつもりはない、私は他の..私の変更を追ってきた:)このチュートリアルのリンクは:http://www.javacodegeeks.com/2011/07/jqgrid-rest-ajax-spring -mvc-integration.html – Juano7894

関連する問題