いいね!数

0

閲覧数
228

こんにちわ。

 
xp:pagerはviewPanelやrepeatでページ送りしてくれる便利なコントロールです。
データソースをviewにしてるなら気にしないのですが、自分で組み上げた配列データをデータソースにする場合、データの総数が多いと、データソースを組み上げる処理が結構重くなります。
でも、実際に画面に一度に表示するのはせいぜい50程度なので、もったいない。
そこで質問なのですが、ページャでページ送りした時に、次に表示するデータソースを用意してから、ページ送りすると直前に用意したデータソースを表示するという方法はないでしょうか?
全データの総数はあらかじめわかっているとします。
/yac
サーバー情報:9.0.1 | クライアント情報: | 
カテゴリ:アプリ開発 - XPages | タグ:
  | 質問日時:2018/11/23 12:57:22

回答・コメント

いいね!数

0

xp:repeat と xp:pagerを組み合わせた場合、ページ送りする毎に、xp:repeatの再計算するんですね。

ということは、データソース計算する時に、次に表示するのが何ページ目かわかれば、次に表示する領域のデータだけ真面目に計算すれば良さそう。

あるとしたら、xp:pagerにそれっぽいプロパティがありそうですが見当たりません。

この辺ご存知の方、いましたら教えてください。

/Yac

回答日時:2018/11/23 18:50:22

いいね!数

0

全然試していないので間違ってたらごめんなさい。

http://learningxpages.com/openntf/xpages/xp_pager.html#prop_pageCount

この辺が参考にならないでしょうか?

 

以前に繰り返すコントロールのページ制御を試した(http://guylocke.blogspot.com/2015/09/blog-post.html)ことがあって、そのときに上のドキュメントを参照しました。

 

回答日時:2018/11/23 22:08:26

いいね!数

0

情報ありがとうございます。

こんな感じで<xp:pager>からpageCountを取ってくるという意味ですよね。

        <xp:repeat id="repeat1" rows="10" var="item">
            <xp:this.value>
              <![CDATA[#{javascript:
                var pager_element = getComponent("pager1");
                debug("page_count = ", pager_element.pageCount);
                var list = [];
                // ダミーで100個のデータを用意
                for(var index=0; index < 100; index++) {
                  var myitem = new Object();
                  myitem.seqno = index+1;
                  myitem.title = "タイトル" + index;
                  myitem.key = @Unique();
                  list.push(myitem);
                }
                return list;
              }]]>
            </xp:this.value>

試してみたのですが、-2147483648みたいな負の数字が返ってきます。

ページ送りしても戻ってくる値は変わらないので、なんか違う感じですね。

ただpageCountがこんな変な値を返すというのも変なので、何か根本的なことをまちがってるのかも。

再現できるよう添付ファイルに再現用DBを用意しました。アクセス権は適当に変えてください。

/Yac

File TypeSizeFile Name
application/octet-stream 384 KB Test_Class.nsf
回答日時:2018/11/25 11:38:04

いいね!数

0

https://stackoverflow.com/questions/40261359/get-page-number-on-the-xpages-view-panel

こちらのスレッドはどうでしょう?

CSJSでページャのinnerHTMLを取得しているようです。

なので、[次へ]とか[前へ]とかもとれてしまいますが、ページカウンタをクリックしたときは、その数字を取得できています。

最初のページは1だと思うので、1ページあたりの文書数と組み合わせて計算すればなんとかならないですか?

 

ちなみに、pageCountはビューコントロールに設置してあるものでも試しましたが、-217483648が返ってきましたね。

これって4桁の符号付き整数の下限値だった気がするので、バグなのかなぁ?とか思ったり・・・

回答日時:2018/11/26 10:48:44

いいね!数

0

CSJS側で取得する方法ですね。

どうもxp:pagerでは次のページ番号は取れなさそうですね。

こりゃxp:pager相当のを自作してみた方が良さげです。

ちょっと頑張ってみます。

/yac

回答日時:2018/11/26 12:50:14

いいね!数

0

“< | 3 | >” くらいのシンプルなページャーなら、割と簡単でした。

データソースを自分で組み上げる場合は、ページャは自作する方がデータ処理量が少なく済むので有利そうです。

xp:pagerでは現在のページを得る方法は無い、というのは収穫でした。

/yac

 

回答日時:2018/11/26 21:28:10