タイトル倉橋浩一、じつはWebObjectsで飯食ってます》WebObjectsで作る掲示板〜続編(3)/ページめくりの機能を追加カテゴリーWebObjects, 倉橋浩一、じつはWebObjectsで飯食っています
作成日2001/8/11 20:11:53作成者新居雅行
メッセージ一覧画面MessageListPageは、データベースに登録されているメッセージを一覧表示するための画面なのですが、WODisplayGroupのdgMessageに1ページあたりのレコード数が設定されているにもかかわらずページを送るためのボタンが用意されていません。つまり、10件以上登録すると、そのメッセージが表示されなくなってしまう、という間抜けな状態です。

なお、dgMessageがどう設定されているかは、WOBuilder上でdgMessageをダブルクリックすれば見ることができます。
 

ここには、対象となるEntity(テーブル)がMessageであり、1ページに表示する行数は10、起動時にデータを読み込み(fetch on load)、更新日付順(updated)順にソートされる、と設定されています。ちなみに、ソート順は、dgMessageに対してupdateDisplayedObjects()を実行した時に反映されます。

なお、ページをめくるための機能を追加するには、二つの方法があります。それは、WOHyperLinkを使って自作する方法と、WebObjectsに予め用意されているページ管理コンポーネントWOBatchNav.Barを使う方法です。WOHyperLinkを使う方法については、新居さんの連載でも取り上げられていましたので(一言でいえば、WOHyperLinkを二つ用意し、WODisplayGroupのdisplayNextBatchと、displayPreviousBatchをそれぞれのactionとバインドすればOKです)、ここではページ管理コンポーネントを使ってみます。あまりデザインが良くないし変更の自由度もイマイチなのですが、必要な機能が用意されていて、とにかく簡単に使えますので。

(1).WOBuilderでMessageListPageを開く
 

(2).位置を決める:WOBatchNav.barを配置する位置を来ます。「戻る」と「書き込み」のリンクが配置されたテーブルと、WORepetitionの間にカーソルを置きます。この場合、WORepetitionの外側であれば、どこでも構いません。お好きな場所にどうぞ。WORepetitionの内側に置くとどうなるかは、後でご自分で試してみてください。少なくとも、壊れることはありませんから。

(3).WOBuilder上で、パレットを開く:パレットは、パレットアイコン(ShowPalette)をクリックするか、WindowメニューからPaletteを選択して、開くことができます。パレットの一番左にあるWOExtensionsアイコンをクリックします。
 

(4).WOBatchNav.Barを配置する:パレット上のWOBatchNav.Barを、さきほど決めた位置付近までドラッグします。なにやら立派なバーが配置されたはずです。
 

(5).WOBatchNav.BarとWODisplayGroupをバインド:dgMessageとWOBatchNav.BarのdisplayGroupをバインドします。

これだけでもページめくりとして使えるのですが、もうちょっと設定をします。インスペクタで、widthを400、objeectNameに"Message"と入力します。
 

ここで、WOBuilderをSaveします。

(6).テスト:これはコンポーネント上だけの変更ですから、コンパイルは不要です。ブラウザで、最初の画面(「掲示板へ」とだけ書かれた画面)に戻り、「掲示板へ」をクリックします。すると、「戻る」「書き込み」の下に、メッセージの数と、さきほど入力した「Message(s)」が表示されているはずです。
 

ここでは3件しかデータが入っていませんので、ページめくりの効果はわかりません。ので、適当にデータを入力してみます。すると、表示が変わります。
 

左右に向いた矢印をクリックするとページが前後し、ページ数を入力するとそのページを直接呼び出し、Display itemsを変更すると1ページに表示する件数を変更することができる....ページめくりの機能が実装できました。

なお、Message(s)の左にある数字は、WODisplayGroupのallObjects()に記録されているレコードの件数です。つまり、allObjects()は、fetch on loadなどでデータを読み込むと、すべてのデータを読み込んできてしまいます。せいぜい100件ぐらいまでならこの方式でも我慢できますが、これより多くなるとWODisplayGroup+WOBatchNav.Barでは満足なパフォーマンスを得ることができません。実は、この辺への対応が、WebObjectsのプロとアマを分ける一つの境界線だったりするのですが....。
(続く)
[倉橋浩一/テクニカル・ピット]
関連リンクWebObjectsのページ