About

General

Teeda Core

Teeda Extension

Teeda Ajax

プロジェクト文書

モジュール

Built by Maven

繰り返し出力

リスト項目を繰り返し出力するには

<ul><ol><dl> 要素のいずれかに id 属性を付け, Items で終わる値とします. その内容に <li><dt><dd> 要素を記述します.

<li><dt><dd> 要素の内容 (子孫) には, <span> 要素や <div> 要素を使ってテキストを動的に出力することができます.

ページクラスに <ul> 要素等の id 属性と同じ名前で, 型が配列または java.util.List のプロパティ ( xxxItems ) を用意し,表示する情報を設定します.

xxxItems プロパティの要素と同じ型で,末尾の Items を取り除いた名前のプロパティ ( xxx ) を用意します. xxx プロパティがDtoまたは java.util.Map の場合は,Dtoのプロパティと同じ名前と型 ( Map の場合はキーと同じ名前で値と同じ型) のプロパティをページクラスにも持たせます.

レンダリング時, Items プロパティの要素数分,リスト項目が繰り返し表示されます.

例:テンプレートHTML (foo.html)
<ul id="nameItems">
    <li><span id="name">dummy</span></li>
</ul>
例:ページクラスのプロパティ (FooPage.java)
public String[] nameItems;
public String name; //Teedaが設定
例:レンダリング結果

nameItems プロパティが "Teeda""SAStruts""Cubby" , を要素とする配列の場合, レンダリング結果は次のようになります.

<ul id="nameItems">
    <li><span id="name">Teeda</span></li>
    <li><span id="name">SAStruts</span></li>
    <li><span id="name">Cubby</span></li>
</ul>

テーブルの行を繰り返し出力するには

<table> 要素または <tbody> 要素のいずれかに id 属性を付け, Items で終わる値とします. その内容に <tr> 要素を記述します.

<tr> 要素の内容 (子孫) には, <span> 要素や <div> 要素を使ってテキストを動的に出力することができます.

ページクラスに <tbody> 要素等の id 属性と同じ名前で, 型が配列または java.util.List のプロパティ ( xxxItems ) を用意し,表示する情報を設定します.

xxxItems プロパティの要素と同じ型で,末尾の Items を取り除いた名前のプロパティ ( xxx ) を用意します. xxx プロパティがDtoまたは java.util.Map の場合は,Dtoのプロパティと同じ名前と型 ( Map の場合はキーと同じ名前で値と同じ型) のプロパティをページクラスにも持たせます.

レンダリング時, Items プロパティの要素数分,行が繰り返し表示されます.

例:テンプレートHTML (foo.html)
<table>
    <tbody id="specItems">
        <tr>
            <td><span id="shortName">dummy</span></td>
            <td><span id="fullName">dummy</span></td>
        </tr>
    </tbody>
</table>
例:ページクラスのプロパティ (FooPage.java)
public List<SpecDto> specItems;
public SpecDto spec;     //Teedaが設定
public String shortName; //Teedaが設定
public String fullName;  //Teedaが設定
例:Dtoのプロパティ (SpecDto.java)
public String shortName;
public String fullName;
例:レンダリング結果

specItems プロパティが 3つの SpecDto を要素とする List の場合, レンダリング結果は次のようになります.

<table>
    <tbody id="specItems">
        <tr>
            <td><span id="shortName">JSF</span></td>
            <td><span id="fullName">JavaServer Faces</span></td>
        </tr>
        <tr>
            <td><span id="shortName">EJB</span></td>
            <td><span id="fullName">Enterprise JavaBeans</span></td>
        </tr>
        <tr>
            <td><span id="shortName">JPA</span></td>
            <td><span id="fullName">Java Persistence API</span></td>
        </tr>
    </tbody>
</table>

テーブルの列を繰り返し出力するには

<tr> 要素に id 属性を付け, Items で終わる値とします. その内容に <td> 要素または <th> 要素を記述します.

<td> 要素または <th> 要素の内容 (子孫) には, <span> 要素や <div> 要素を使ってテキストを動的に出力することができます.

ページクラスに <tr> 要素の id 属性と同じ名前で, 型が配列または java.util.List のプロパティ ( xxxItems ) を用意し,表示する情報を設定します.

xxxItems プロパティの要素と同じ型で,末尾の Items を取り除いた名前のプロパティ ( xxx ) を用意します. xxx プロパティがDtoまたは java.util.Map の場合は,Dtoのプロパティと同じ名前と型 ( Map の場合はキーと同じ名前で値と同じ型) のプロパティをページクラスにも持たせます.

レンダリング時, Items プロパティの要素数分,列が繰り返し表示されます.

例:テンプレートHTML (foo.html)
<table>
    <tbody>
        <tr id="productItems">
            <td><span id="name"></span></td>
        </tr>
    </tbody>
</table>
例:ページクラスのプロパティ (FooPage.java)
public List<Map> productItems;
public Map product; //Teedaが設定
public String name; //Teedaが設定
例:レンダリング結果

productItems プロパティが 3つの Map を要素とする List で,要素の Map"name" をキーとするマッピングを含む場合, レンダリング結果は次のようになります.

<table>
    <tbody>
        <tr id="productItems">
            <td><span id="name">Teeda</span></td>
            <td><span id="name">SAStruts</span></td>
            <td><span id="name">Cubby</span></td>
        </tr>
    </tbody>
</table>

任意の要素を繰り返し出力するには

<span> 要素または <div> 要素に id 属性を付け, Items で終わる値とします. その内容に任意の要素を記述します.

<span> 要素または <div> 要素の内容 (子孫) には, <span> 要素や <div> 要素を使ってテキストを動的に出力することができます.

ページクラスに <span> 要素または <div> 要素の id 属性と同じ名前で, 型が配列または java.util.List のプロパティ ( xxxItems ) を用意し,表示する情報を設定します.

xxxItems プロパティの要素と同じ型で,末尾の Items を取り除いた名前のプロパティ ( xxx ) を用意します. xxx プロパティがDtoまたは java.util.Map の場合は,Dtoのプロパティと同じ名前と型 ( Map の場合はキーと同じ名前で値と同じ型) のプロパティをページクラスにも持たせます.

レンダリング時, Items プロパティの要素数分,リスト項目が繰り返し表示されます.

デフォルトでは, id 属性に ~Items を指定した <span> 要素または <div> 要素の開始タグおよび終了タグはレンダリングされません. タグをレンダリングするには te:omittag 属性に false を指定します.

例:テンプレートHTML (foo.html)
<div id="nameItems">
    <span id="name" /><br />
</div>
例:ページクラスのプロパティ (FooPage.java)
public String[] nameItems;
public String name; //Teedaが設定
例:レンダリング結果

nameItems プロパティが "Teeda""SAStruts""Cubby" , を要素とする配列の場合, レンダリング結果は次のようになります.


    <span id="name" >Teeda</span><br />
    <span id="name" >SAStruts</span><br />
    <span id="name" >Cubby</span><br />

ネストした繰り返し

ネストした繰り返しを使うには (その1)

外側の繰り返しの要素に id 属性を付け, ItemsItems で終わる値 ( xxxItemsItems ) とします. 内側の繰り返しの要素に id 属性を付け, 外側の繰り返し要素の id 属性の値から最後の Items を取り除いた値 ( xxxItems ) とします.

ページクラスに外側の繰り返し要素の id 属性と同じ名前 ( xxxItemsItems ) で, 型が配列の配列または java.util.ListList のプロパティを用意し,表示する情報を設定します.

xxxItemsItems プロパティの要素と同じ型 (配列または List ) で,末尾の Items を取り除いたプロパティ ( xxxItems ) と,その要素と同じ型で 末尾の Items を取り除いたプロパティ ( xxx ) を用意します. xxx プロパティがDtoまたは java.util.Map の場合は,Dtoのプロパティと同じ名前と型 ( Map の場合はキーと同じ名前で値と同じ型) のプロパティをページクラスにも持たせます.

例:テンプレートHTML (foo.html)
<table>
    <tbody id="nameItemsItems">
        <tr id="nameItems">
            <td><span id="name">dummy</span></td>
        </tr>
    </tbody>
</table>
例:ページクラスのプロパティ (FooPage.java)
public String[][] nameItemsItems;
public String[] nameItems; //Teedaが設定
public String name;        //Teedaが設定
例:レンダリング結果

nameItemsItems プロパティの値が

{ { "A1", "A2"}, { "B1", "B2"} }

の場合,レンダリング結果は次のようになります.

<table>
    <tbody id="nameItemsItems">
        <tr id="nameItems>
            <td><span id="name">A1</span></td>
            <td><span id="name">A2</span></td>
        </tr>
        <tr id="nameItems>
            <td><span id="name">B1</span></td>
            <td><span id="name">B2</span></td>
        </tr>
    </tbody>
</table>

ネストした繰り返しを使うには (その2)

外側の繰り返しの要素に id 属性を付け, Items で終わる値 ( xxxItems ) とします. 内側の繰り返しの要素にも id 属性を付け, Items で終わる値 ( yyyItems ) とします.

ページクラスに外側の繰り返し要素の id 属性と同じ名前 ( xxxItems ) で, 型が配列または java.util.List のプロパティを用意します. 要素型はDtoまたは java.util.Map とし,内側の繰り返し要素の id 属性と同じ名前 ( yyyItems ) で, 型が配列または java.util.List のプロパティ (またはキー) を用意します.

xxxItems プロパティの要素と同じ型 (Dtoまたは Map ) と同じ型で末尾の Items を取り除いたプロパティ ( xxx ) および, yyyItems の要素と同じ型で末尾の Items を取り除いたプロパティ ( yyy ) を用意します. xxx および yyy プロパティがDtoまたは java.util.Map の場合は,Dtoのプロパティと同じ名前と型 ( Map の場合はキーと同じ名前で値と同じ型) のプロパティをページクラスにも持たせます.

例:テンプレートHTML (foo.html)
<table>
    <tbody id="rowItems">
        <tr id="colItems">
            <td><span id="name">dummy</span></td>
        </tr>
    </tbody>
</table>
例:ページクラスのプロパティ (FooPage.java)
public List<RowDto> rowItems;
public RowDto row;            //Teedaが設定
public List<ColDto> colItems; //Teedaが設定
public ColDto col;            //Teedaが設定 
public String name;           //Teedaが設定
例:行の情報を持つRowDtoのプロパティ (RowDto.java)
public List<ColDto> colItems;
例:列の情報を持つColDtoのプロパティ (ColDto.java)
public String name;
例:レンダリング結果
<table>
    <tbody id="rowItems">
        <tr id="colItems>
            <td><span id="name">A1</span></td>
            <td><span id="name">A2</span></td>
        </tr>
        <tr id="colItems>
            <td><span id="name">B1</span></td>
            <td><span id="name">B2</span></td>
        </tr>
    </tbody>
</table>

入力フォーム

繰り返しの中で入力項目を使うには

テンプレートHTMLに,繰り返しの要素に付けた id 属性の名前 ( xxxItems ) の末尾に Save を付けた 隠しフィールド を用意します. このフィールドは, 繰り返しの要素より前に記述する必要があります.

繰り返しの中で <input> 要素や <textarea> 等を使うことができます.

ページクラスの繰り返し用のプロパティ ( xxxItems ) の要素型はDtoとします.

例:テンプレートHTML (foo.html)
<form id="form">
    <input type="hidden" id="nameItemsSave" />
    <table>
        <tbody id="productItems">
            <tr>
                <td>名前</td>
                <td><input type="text" id="name" /></td>
            </tr>
        </tbody>
    </table>
    <input type="submit" id="doSubmit" value="Submit" />
</form>
例:ページクラスのプロパティ (FooPage.java)
public List<ProductDto> productItems;
public NameDto product; //Teedaが設定
public String name;     //Teedaが設定
例:レンダリング結果

productItems プロパティが3つの要素を持つ List の場合, レンダリング結果は次のようになります.

<form id="form" name="form" method="post" action="...">
    <input type="hidden" id="productItemsSave" name="form:nameItemsSave" value="..." />
    <table>
        <tbody id="productItems">
            <tr>
                <td>名前</td>
                <td><input type="text" id="name" name="form:nameItems:0:name" value="" /></td>
            </tr>
            <tr>
                <td>名前</td>
                <td><input type="text" id="name" name="form:nameItems:1:name" value="" /></td>
            </tr>
            <tr>
                <td>名前</td>
                <td><input type="text" id="name" name="form:nameItems:2:name" value="" /></td>
            </tr>
        </tbody>
    </table>
    <input type="submit" id="doSubmit" name="form:doSubmit" value="Submit" />
</form>

テキストフィールドに入力してフォームをサブミットすると, productItems の対応する要素 ( ProductDtoname プロパティ) に入力した値が設定された状態で doSubmit() メソッドが呼び出されます.

注意点

繰り返しの中に入力項目がチェックボックス一つだけの場合, 未選択の項目がリクエストパラメータに含まれないため, xxxItems の要素数が正しく復元されない場合があります. そのような場合は繰り返しの中に 隠しフィールド を含めるようにしてください.

インデックス

テーブルの偶数行と奇数行で背景色を変えるには

ダイナミックプロパティ の中でインデックスを参照します.

ページクラスに,繰り返しの要素に付けた id 属性の値 ( xxxItems ) の末尾の ItemsIndex に置き換えた名前 ( xxxIndex ) で, 型が int のプロパティを用意します.

レンダリング時,繰り返しの中で参照されるダイナミックプロパティのgetterメソッドの中で xxxIndex を参照することにより,現在のインデックスを得ることができます.

例:テンプレートHTML (foo.html)
<table>
    <tbody id="nameItems">
        <tr id="row" class="dummy">
            <td><span id="name" /></td>
        </tr>
    </tbody>
</table>
例:ページクラスのプロパティ (FooPage.java)
public String[] nameItems;
public String name;   //Teedaが設定
public int nameIndex; //Teedaが設定

public String getRowStyleClass() {
    return (nameIndex + 1) % 2 == 0 ? "even" : "odd";
}
例:レンダリング結果

nameItems プロパティが "Teeda""SAStruts""Cubby" , を要素とする配列の場合, レンダリング結果は次のようになります.

<table>
    <tbody id="nameItems">
        <tr id="row" class="odd">
            <td><span id="name">Teeda</span></td>
        </tr>
        <tr id="row" class="even">
            <td><span id="name">SAStruts</span></td>
        </tr>
        <tr id="row" class="odd">
            <td><span id="name">Cubby</span></td>
        </tr>
    </tbody>
</table>

<tr> 要素の class 属性には, getRowStyleClass() メソッドの戻り値がレンダリングされます. getRowStyleClass() メソッドは nameIndex を参照して, 奇数行なら "odd" ,偶数行なら "even" を返します.

テーブルでrowspanを使うには

<td> 要素の表示/非表示を制御するために, id 属性を is で始まる値を指定し, rowspan 属性を指定します.

ページクラスに,繰り返しの要素に付けた id 属性の値 ( xxxItems ) の末尾の ItemsIndex に置き換えた名前 ( xxxIndex ) で, 型が int のプロパティを用意します.

<td> 要素の id 属性と同じ名前のメソッド isXxx() の中でインデックスを参照して, <td> 要素を表示する場合は true ,表示しない場合は false を返します.

<td> 要素の rowspan 属性に対応するダイナミックプロパティのgetterメソッド getXxxRowspan() メソッドを用意します. メソッドの中でインデックスを参照して, <td> 要素を表示する場合の rowspan 属性の値を返します. このgetterメソッドは, isXxx() メソッドが true を返した場合のみ呼び出されます.

例:テンプレートHTML (foo.html)
<table>
    <tbody id="productItems">
        <tr>
            <td id="isCategory" rowspan="2">
                <span id="categoryName">dummy</span>
            </td>
            <td><span id="productName">dummy</span></td>
        </tr>
        <tr id="mockRow">
            <td>dummy</td>
        </tr>
    </tbody>
</table>
例:ページクラスのプロパティ (FooPage.java)
public productDto[] productItems;
public String categoryName; //Teedaが設定
public String productName;  //Teedaが設定
public int productIndex;    //Teedaが設定

public boolean isCategory() {
    //最初の行なら<td>を表示する
    if (productIndex == 0) {
        return true;
    }
    //現在のカテゴリ名が直前の行と異なる場合は<td>を表示する
    return !categoryName.equals(productItems[productIndex - 1].categoryName);
}

public String getCategoryRowspan() {
    //現在のカテゴリ名と同じカテゴリ名が連続する行数を返す
    int rowspan = 1;
    for (int i = productIndex + 1; i < productItems.length; ++i) {
        if (!categoryName.equals(productItems[i].categoryName)) {
            break;
        }
        ++rowspan;
    }
    return rowspan;
}
例:Dtoのプロパティ (ProductDto.java)
public String categoryName;
public String productName;
例:レンダリング結果

productItems が以下の要素を持っている場合,

categoryName productName
プレゼンテーション Teeda
プレゼンテーション SAStruts
プレゼンテーション Cubby
パーシステンス Kuina-Dao
パーシステンス S2Dao

レンダリング結果は次のようになります.

<table>
    <tbody id="productItems">
        <tr>
            <td id="isCategory" rowspan="3">
                <span id="categoryName">プレゼンテーション</span>
            </td>
            <td><span id="productName">Teeda</span></td>
        </tr>
        <tr>
            <td><span id="productName">SAStruts</span></td>
        </tr>
        <tr>
            <td><span id="productName">Cubby</span></td>
        </tr>
        <tr>
            <td id="isCategory" rowspan="2">
                <span id="categoryName">パーシステンス</span>
            </td>
            <td><span id="productName">Kuina-Dao</span></td>
        </tr>
        <tr>
            <td><span id="productName">S2Dao</span></td>
        </tr>
    </tbody>
</table>

id 属性が isCategory<td> 要素は, 最初の行または, カテゴリ名が直前の行のカテゴリ名と異なる場合のみ表示されます. <td> 要素が表示される場合は, 同じカテゴリ名の行数が rowspan 属性の値となります.

関連項目