繰り返し出力
リスト項目を繰り返し出力するには
<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.List
の
List
のプロパティを用意し,表示する情報を設定します.
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
の対応する要素 (
ProductDto
の
name
プロパティ) に入力した値が設定された状態で
doSubmit()
メソッドが呼び出されます.
繰り返しの中に入力項目がチェックボックス一つだけの場合,
未選択の項目がリクエストパラメータに含まれないため,
xxxItems
の要素数が正しく復元されない場合があります. そのような場合は繰り返しの中に
隠しフィールド
を含めるようにしてください.
インデックス
テーブルの偶数行と奇数行で背景色を変えるには
ダイナミックプロパティ の中でインデックスを参照します.
ページクラスに,繰り返しの要素に付けた
id
属性の値 (
xxxItems
) の末尾の
Items
を
Index
に置き換えた名前 (
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
) の末尾の
Items
を
Index
に置き換えた名前 (
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
属性の値となります.