2010年11月22日月曜日
2010年11月11日木曜日
Mayaa ループ
前回は値の出力(属性への出力も)を実施したので、
今回はループ。
あとは、条件分岐をやれば、だいたいのページは生成できると思います。
さて、こんなテーブルを作りたいことありますよね。
たとえば、一覧出力画面とかで。
で、以下の状況を想定。
htmlは↓のかんじ
で、mayaaは↓のかんじ
ここでポイントなのが、<m:doBody />タグ。
これがないと、↓のようなhtml出力されてしまいます。
Mayaaのドキュメントには、以下のように書いてあります。
つまり、簡単にいうと、forプロセッサのボディを評価したければ、<m:doBody />を書け、と。
この場合だと、を評価しないとinfoが使えませんので、ぜひ<m:doBody />を付けてください。
ちなみに、<m:for />にreplace="false"を付けないと、が消えてしまい、
以下のようなhtmlが出力されてしまいます。
今回はループ。
あとは、条件分岐をやれば、だいたいのページは生成できると思います。
さて、こんなテーブルを作りたいことありますよね。
たとえば、一覧出力画面とかで。
- <table border="1" frame="box" id="addressTable">
- <tr>
- <td width="80" align="center"><b>顧客コード</b></td>
- <td width="80" align="center"><b>顧客氏名</b></td>
- <td width="200" align="center"><b>住所</b></td>
- </tr>
- <tr>
- <td align="center">00000001</td>
- <td align="center">terasoluna1</td>
- <td align="center">東京都中央区</td>
- </tr><tr>
- <td align="center">00000002</td>
- <td align="center">田中</td>
- <td align="center">東京都中央区</td>
- </tr><tr>
- <td align="center">00000003</td>
- <td align="center">鈴木</td>
- <td align="center">東京都中央区</td>
- </tr><tr>
- <td align="center">00000004</td>
- <td align="center">高橋</td>
- <td align="center">千葉県成田市</td>
- </tr><tr>
- <td align="center">00000005</td>
- <td align="center">小池</td>
- <td align="center">東京都中央区</td>
- </tr><tr>
- <td align="center">00000006</td>
- <td align="center">鈴木</td>
- <td align="center">東京都足立区</td>
- </tr><tr>
- <td align="center">00000007</td>
- <td align="center">佐藤</td>
- <td align="center">東京都国立市</td>
- </tr><tr>
- <td align="center">00000008</td>
- <td align="center">青木</td>
- <td align="center">東京都渋谷区</td>
- </tr><tr>
- <td align="center">00000009</td>
- <td align="center">山本</td>
- <td align="center">東京都中野区</td>
- </tr><tr>
- <td align="center">00000010</td>
- <td align="center">山下</td>
- <td align="center">東京都三鷹市</td>
- </tr>
- </table>
で、以下の状況を想定。
- requestスコープに、listAddressというjava.util.List型のオブジェクトがある
- Listの中身はPOJOで、customerCode, customerName, customerAddressが存在する
htmlは↓のかんじ
- <table border="1" frame="box" id="addressTable">
- <tr>
- <td width="80" align="center"><b>顧客コード</b></td>
- <td width="80" align="center"><b>顧客氏名</b></td>
- <td width="200" align="center"><b>住所</b></td>
- </tr>
- <tr m:id="loop">
- <td align="center"><span m:id="_customerCode">dummy code</span></td>
- <td align="center"><span m:id="_customerName">dummy name</span></td>
- <td align="center"><span m:id="_customerAddress">dummy address</span></td>
- </tr>
- </table>
で、mayaaは↓のかんじ
- <?xml version="1.0" encoding="UTF-8"?>
- <m:mayaa xmlns:m="http://mayaa.seasar.org">
- <m:for m:id="loop"
- m:init="${ var i = 0 }"
- test="${ i < listAddress.size() }"
- m:after="${ i++ }" replace="false">
- <m:exec script="${ var info = listAddress.get(i); }" />
- <m:doBody />
- </m:for>
- <!-- 顧客コード -->
- <m:write m:id="_customerCode"
- value="${info.customerCode}" />
- <!-- 顧客氏名 -->
- <m:write m:id="_customerName"
- value="${info.customerName}" />
- <!-- 顧客住所 -->
- <m:write m:id="_customerAddress"
- value="${info.customerAddress}" />
- </m:mayaa>
ここでポイントなのが、<m:doBody />タグ。
これがないと、↓のようなhtml出力されてしまいます。
- <table border="1" frame="box" id="addressTable">
- <tr>
- <td width="80" align="center"><b>顧客コード</b></td>
- <td width="80" align="center"><b>顧客氏名</b></td>
- <td width="200" align="center"><b>住所</b></td>
- </tr>
- <tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr>
- </table>
Mayaaのドキュメントには、以下のように書いてあります。
割り当てられたタグのボディを処理します。for プロセッサなどタグのボディが有効なプロセッサで動作します。通常は明示的に使用することはありませんが、Mayaa ファイル側のボディに attribute 以外のプロセッサや空白 (タブ文字、改行を含む) 以外の文字列を記述した場合、doBody を使用しなければタグのボディが処理されません。
つまり、簡単にいうと、forプロセッサのボディを評価したければ、<m:doBody />を書け、と。
この場合だと、
ちなみに、<m:for />にreplace="false"を付けないと、が消えてしまい、
以下のようなhtmlが出力されてしまいます。
- <table border="1" frame="box" id="addressTable">
- <tr>
- <td width="80" align="center"><b>顧客コード</b></td>
- <td width="80" align="center"><b>顧客氏名</b></td>
- <td width="200" align="center"><b>住所</b></td>
- </tr>
- <td align="center">00000001</td>
- <td align="center">terasoluna1</td>
- <td align="center">東京都中央区</td>
- <td align="center">00000002</td>
- <td align="center">田中</td>
- <td align="center">東京都中央区</td>
- <td align="center">00000003</td>
- <td align="center">鈴木</td>
- <td align="center">東京都中央区</td>
- <td align="center">00000004</td>
- <td align="center">高橋</td>
- <td align="center">千葉県成田市</td>
- <td align="center">00000005</td>
- <td align="center">小池</td>
- <td align="center">東京都中央区</td>
- <td align="center">00000006</td>
- <td align="center">鈴木</td>
- <td align="center">東京都足立区</td>
- <td align="center">00000007</td>
- <td align="center">佐藤</td>
- <td align="center">東京都国立市</td>
- <td align="center">00000008</td>
- <td align="center">青木</td>
- <td align="center">東京都渋谷区</td>
- <td align="center">00000009</td>
- <td align="center">山本</td>
- <td align="center">東京都中野区</td>
- <td align="center">00000010</td>
- <td align="center">山下</td>
- <td align="center">東京都三鷹市</td>
- </table>
2010年11月9日火曜日
Mayaa 値の挿入
Mayaaについて書いてみる。
まあ、に書いてあるんだけど、
ここには、目的別に書いてみる。
●表示
みたいな出力をしたい場合があります。
もちろん、「○○」はセッション中の動的な値で。
そういうときは、
前提
●html
などと書きます。
もちろん、htmlの先頭には、
と書いておきます。
で、mayaaファイルには
javascript:void(0)
って書けばOKです。
上では要素として?の出力を書きましたが、
属性値に書きたい場合もありますね。
こんな場合を想定↓
●表示は省略。
テキストボックス中のvalueに出力したい場合
1. 想定するケースとしては、入力画面でsubmitしたあと、入力エラーがあって、画面を再表示する場合
2. 変更画面で、現在の値を入力しておいてあげる優しさを見せたいとき
そういうときは、
前提
●html
などと書きます。
で、mayaaファイルには
って書けばOKです。
これで、valueの中に動的な値を出力できます。
まあ、に書いてあるんだけど、
ここには、目的別に書いてみる。
セッション中の値を表示する
●表示
- ようこそ○○さん
みたいな出力をしたい場合があります。
もちろん、「○○」はセッション中の動的な値で。
そういうときは、
前提
- セッション中にuserInfoオブジェクトが存在する
- userInfoにはuserName属性があり、そのgetter/setterが存在する(この場合setterは関係ないかも)
- ちなみにuserNameはjava.lang.String型である
●html
- ようこそ<span m:id="userName">○○</span>さん
などと書きます。
もちろん、htmlの先頭には、
- <html lang="ja" xmlns:m="http://mayaa.seasar.org">
と書いておきます。
で、mayaaファイルには
- <m:write m:id="userName" value="${session.userName}" />
javascript:void(0)
って書けばOKです。
value属性にセッション中の値を表示する
上では要素として?の出力を書きましたが、
属性値に書きたい場合もありますね。
こんな場合を想定↓
●表示は省略。
テキストボックス中のvalueに出力したい場合
1. 想定するケースとしては、入力画面でsubmitしたあと、入力エラーがあって、画面を再表示する場合
2. 変更画面で、現在の値を入力しておいてあげる優しさを見せたいとき
そういうときは、
前提
- セッション中にuserInfoオブジェクトが存在する
- userInfoにはuserName属性があり、そのgetter/setterが存在する(この場合setterは関係ないかも)
- ちなみにuserNameはjava.lang.String型である
●html
- 変更後のユーザ名: <input type="text" name="updateUserName" size="20" value="" m:id="userName">
変更後のユーザ名:
などと書きます。
で、mayaaファイルには
- <m:echo m:id="userName">
- <m:attribute name="value" value="${session.userName}" />
- </e:echo>
って書けばOKです。
これで、valueの中に動的な値を出力できます。
2010年11月3日水曜日
Javaテンプレートエンジン [Mayaa]
登録:
投稿 (Atom)