ページの先頭行へ戻る
 Apcoordinatorユーザーズガイド

16.2.1 画面部品タグの概要

Webcoordinatorの画面部品タグは、データの繰り返し数やデータの状態に従った動的な画面構成や、データと入出力ページを組にした部品化を支援する機能です。“A.2 画面部品のサンプル”には、画面部品タグを利用したアプリケーションのサンプルを示しています。

Webcoordinatorの画面部品タグには、以下のものがあります。

ポイント

画面部品タグは部品化やHTMLの詳細な記述が可能です。単純に表や選択項目を作成する場合はコンポーネントタグを利用すると簡単に記述できます。

画面部品タグを使う場合には、各部品で決められたインタフェースを実装したデータBeanを準備します。また、入出力ページではレンダラと呼ばれるタグで繰り返し構造や条件ごとのフォーマットを記述します。画面部品タグはこのデータBeanにデータを問い合わせながら、該当するレンダラを選択して、内容を画面に転送します。例えば表の場合は、データBeanでTableModelを実装したプロパティを作成し、uji:tableタグはこのインタフェースを通して表のデータを参照します。

uji:tableタグは以下のように動作します。

  1. uji:tableタグのアトリビュートから、TableModelインタフェースを取得します。 bodyに対応付けられたデータBeanのsummaryプロパティがTableModelを返す場合、uji:tableタグで以下のように記述します。サンプルのsummary.jspで記述しています。

    <uji:table bean="body" property="summary">  

    SummaryModelクラスはTableModelを実装しています。

    public class SummaryModel implements com.fujitsu.uji.model.table.TableModel {  

    ModelBeanクラスのsummaryプロパティはこのSummaryModelクラスを返します。

        protected SummaryModel summary;
        public SummaryModel getSummary() {
            return summary;
        }
  2. uji:tableタグはTableModelインタフェースに表のサイズ(行、列)を問い合わせます。 SummayModelクラスではこのためのgetColumnCount、getRowCountメソッドを実装しています。

        public int getColumnCount() {
            return 6;
        }
        public int getRowCount() {
            return dm.getDataCount() + 1;
        }
  3. uji:tableタグは表全体のレンダラを探します。表全体のレンダラはtype="table"と指定されたuji:tableRendererタグです。見つかれば、このタグの内容を出力します。なければ、デフォルトのパターンを出力します。 summary.jspでは以下のように記述しています。

        <uji:tableRenderer type="table" >
            <TABLE border="2" width="100%"><uji:children/></TABLE>
        </uji:tableRenderer>
  4. 出力中にuji:childrenタグがあれば、下位のレンダラの処理を実行します。表の場合は、キャプションのレンダラ(type="caption")を処理したあと、行のレンダラ(type="row")を行数分だけ繰り返して処理をします。例では行のレンダラが省略されているので、デフォルトで以下のように処理します。

    <tr><uji:children/></tr>  
  5. 行のレンダラでuji:childrenタグがあれば、下位のセル(type="column")の処理を実行します。

  6. 行とセルのレンダラは、データ属性(cls)を指定することで、複数のレンダラより選択することができます。 summary.jspでは以下のように記述しています。

          <uji:tableRenderer type="column" cls="header" >
            <TH bgcolor="#EEFFEE"><uji:value/></TH>
          </uji:tableRenderer>
          <uji:tableRenderer type="column" cls="editable" >
            <TD><INPUT name="<uji:name/>" value="<uji:value/>"></TD>
          </uji:tableRenderer>

    データ属性(cls)は、TableModelインタフェースのgetRowClass、getColumnClassより取得した任意の文字列です。 SummayModelクラスで設定しています。

        public java.lang.String getColumnClass(int row, int col) {
            if(row == 0)
                return "header";
            else if(col == 5)
                return "editable";
            return null;
        }

    例ではクラス指定のないレンダラが省略されているため、クラスがnullのセルに対してはデフォルトのレンダラが使用されます。

    <td><uji:value/></td>  
  7. セルのレンダラ中でuji:valueタグがあれば、セルのデータがそこに出力されます。また、uji:nameタグは、INPUTタグで入力された内容をデータBeanに書き戻すための名前を生成します。

ポイント

Webcoordinatorでは、データの状態判定はビジネスロジックまたはデータBean側で行って、表示の変更のみを画面に記述するように設計します。