タイトルWebObjects 5とOpenBaseを使ってみる/6.Webページにテーブルのレコードを一覧(1)カテゴリーデータベース, WebObjects
作成日2001/8/10 14:58:8作成者新居雅行
前回に続いて、WebObjects Builderを使ってMainページの編集を行うことにしよう。Mainぺージは、Project BuilderのWebObjects Applicationのひな形で最初から用意されているページだった。Main.woという名前のアクア色のアイコンをダブルクリックすると、WebObjects Builderで開いて編集ができるようになる。前回はそこに、データベース接続の足掛かりになる2つの変数を定義した。それそれ、Display Groupとテーブルを元に作ったキーである。

このWebObjects Builderは、WebObjectsによって生成されるWebページを設計するツールである。画面をざっと眺めて分かるようにツールバーにボタンがあるので、基本的にはこれらのボタンを使ってページの編集領域にコンポーネントを並べていくのである。いくつかのボタンは、通常のHTMLのタグに対応する。たとえば、「B」ボタンは、選択範囲をBタグで囲むといった具合だ。ツールバーの右下に、濃いブルーのボタンが並んでいる。以下の図では、「Add WOString」というチップヒントが出ているあたりのボタンだ。これらはWebObjectsだけが理解できる特別なタグをページに埋め込む。タグと言うよりも、一般的にはWebObjects専用のコンポーネントを組み込むのである。ボタンをクリックすると、挿入ポイントにコンポーネントは配置される。以下の図は、WOStringというコンポーネントを配置したところである。

◇WebObjects BuilderにあるWebObjectsコンポーネント
 

このWOStringは文字とおり文字列を表示するためのコンポーネントだ。適切な設定を行うと、このページを生成した時に、WOStringは、データベースの特定フィールドの値に置き換わる。つまり、データベースの中身に置き換わるのである。WebObjectsコンポーネントは基本的にこうしたデータベースの中身を表示するといった用途に使うことができる。もちろん、汎用的ないろいろな機能はあるが、まずはデータベースの内容を表示するためのコンポーネント(実体はタグと諸設定が組み合わされる)と考えておけばよいだろう。(以後の作業のために、WOStringを削除しておいてもらいたい。)

ここでいきなりだが、テーブルの内容を一覧表示してみたい。そうした表示は、1レコード分の表示処理を繰り返すということで実現される。レコードの数は場合によって異なるので、そうした手配をするというのは特に異義はないと思う。問題はどうすればいいかだが、「存在するレコードの数だけ繰り返す」という機能をWebページに埋め込むWebObjectsコンポーネントが存在する。WORepetitionと呼ばれるコンポーネントでもちろんツールバーから配置可能だ。以下の図では、マウスポインタのあるツールがWORepetitionである。WOStringの2つ右のものだ。配置するとページにはちょっと複雑そうなコンポーネントが並ぶが、これらが一連のWORepetitionコンポーネントである。

◇WORepetitionをページに配置した
 

WORepetitionは繰り返しを発生するコンポーネントだが、「どのデータの繰り返しなのか」ということをコンポーネントに教えてやらないといけない。つまり、テーブルのデータを繰り返しコンポーネントに引き渡すような定義が必要である。そのために、次のように設定を行う。
まず、下側の領域でDisplay GroupのpersonaladdressDiplayGroupを選択する。右の列にあるdisplayedObjectsをクリックする。このDisplayedObjectsは、テーブルの中身(データベースから取り出した内容)全体を示すオブジェクトと考えればよい。このDisplayedObjectsからドラッグを始めて、以下の図のように、WORepetitionの前の方にある白い四角形のボックスにドラッグを行う。線は自動的に引かれる。

◇Display GroupのDiplayedObjectsとWORepetionのボックスをむすぶ
 

白いボックスは、ドラッグ後はドラッグしてきた項目の名前が(長々とだけど)表示されているのがわかる。言いかえれば、何が設定されているのかが分かるというわけだ。
次に、以下の図のようにすでに作成しているAddressKeyと、WOReptitionの2つ目の白いボックスをドラッグして結ぶ。2つ目のボックスは、WORepetionで繰り返し表示されるレコードの、現在のレコードを管理するための項目である。ここで作ったAddressKeyはいわば1レコードを代表するような変数であるため、イメージ的にはこのオブジェクトに1レコードずつ保持しながら繰り返し並べるようなことを考えれば良いだろう。

◇テーブルのキーとWORepetitionを結ぶ
 

続いて、WORepetitionの中に、フィールドのテキストを表示するためのWOStringコンポーネントを配置する。WORepetitionは最初からRepetitionという文字列が見えているが、この文字列の最後に文字挿入ポインタを置き、そしてdeleteキーで文字を消して、WORepetitionの中に挿入ポイントがある状態で、WebObjects BuilderのWOStringのツールバーボタンをクリックする。そうして、WOStringを配置する。もちろん、操作手順はどうやってもいいのだが、実はWebObjects Builderのエディタはちょっとコツがいると言えばいいだろうか。ワープロなどのように、スムーズに編集が行かないこともあるので、挿入ポイントや選択されているものを注意深く確認をしながら作業を行ってほしい。
そして、配置したWOStringはnameフィールドのデータを表示した。ここでは、下側の領域でAddressKeyを選択すると、中央にテーブルのフィールド一覧が出てくる。そこで、その中のnameから、WOStringの白いボックスにドラッグ&ドロップする。その後は、ボックスに「AddressKey.name」と表示されるはずだ。

◇WOStringを配置しnameフィールドと結び付けた
 

同様にして、WOStringを合計5つ配置し、5つのフィールドそれぞれをドラッグ&ドロップで割り当てた。ちなみに、1行目にnameを配置し、次のtelephoneフィールドの前後には、全角文字で()が入っている。さらに(の前には全角のスペースが入っている。とりあえず、全角文字を入れるとどうなるかをチェックしよう。繰り返しの1行目と1行目は<BR>タグによる改行だが、これは、shift+returnで入力できる。
さらに、5つのフィールドを並べた後は、水平線(つまり、<HR>タグ)が埋め込まれている。ツールバー上段の右から6つ目のボタンをクリックすると配置できる。

◇WORepetition内に各フィールドを表示するWOStringを配置した
 

ここまでの設定を行い、Command+Sキーで保存をしておこう。なお、保存は忘れても後から保存をしますかとたずねてくるので安心だが、基本は編集結果は自分で保存をするということである。
Project Builderに切り替えて、ビルドして実行する。ボタンをクリックしてもいいが、ビルドと実行を両方行うCommand+Rがいちばん手軽だろう。

◇ビルドして実行する
 

実行すると、Internet Explorerが起動し、最初にメッセ−ジを表示した後、設定に間違いがなけらえば、次のように、テーブルの内容を一覧されるページが表示されるはずである。今回はいい加減なデータを入れたので、ちょっと見づらいが、OpenBaseManagerで適当に入力したレコードのデータがそのまま見えているのを確認してもらいたい。2レコードあるので2回繰り替えされているが、WOStringがフィールドのデータに置き換わってページが表示されているあたりが大きなポイントとなるわけだ。ところで、画面に?マークが表示されているが、この部分は全角の空白やカッコなどである。とりあえず日本語文字列は出て来ないが、それはさておいて、とにかくテーブルの内容をWebブラウザで参照できたのである。

◇Webページにレコードのデータが一覧された
 
関連リンク