コンボリスト作成
今日まで、コンボリストを作成するのに、
for文でお約束の処理を書いていた訳だが、
ConversionRuleアノテーションを使えば、
一発で変換できるじゃないか・・・_| ̄|○
●従来の処理
for(int i = 0; i < hogeDbItems.length; i++){
Map
map.put("label",hogeDbItems[i].getName());
map.put("value",hogeDbItems[i].getId());
hogeItems.add(map);
}
●ConversionRuleアノテーションを使った処理
[HogeDxo]
@ConversionRule("value:id,label:name")
List
[HogeListPage]
hogeItems = this.getHogeDxo().convert(hogeDbItems);
以上
foreach内でのラジオボタン
レコード単位にラジオボタンを表示する(例1参照)際には
foreach内にラジオボタンを配置することになるが、
これがちょっと面倒になる。
(例1)
山田次郎
山田三郎
山田四郎
普通に記述してみる(例2参照)と・・。
(例2)
<table border="1" align="left"> <tr> <th>選択</th> <th>名前</th> </tr> <div id="aaaItems"> <tr> <td><span id="hoge"><input type="radio" name="hoge" /></span></td> <td><span id="name">name</span></td> </tr> </div> </table>
出力されたソースを見てみると例3の様になり、
ボタンの同期が取れず、意図した動きをしない・・(TДT)
(例3)
<input type="radio" name="XXXForm:aaaItems:0:hoge" value="0" /> <input type="radio" name="XXXForm:aaaItems:1:hoge" value="0" /> <input type="radio" name="XXXForm:aaaItems:2:hoge" value="0" /> <input type="radio" name="XXXForm:aaaItems:3:hoge" value="0" /> <input type="radio" name="XXXForm:aaaItems:4:hoge" value="0" />
_| ̄|○
なので結局力技(動的にラジオ部分のhtmlを出力)で対応することにした。
(注:te:escape="false"でエスケープを無効。
このタグを使うにはxmlns:te="http://www.seasar.org/teeda/extension"を定義する)
<table border="1" align="left"> <tr> <th>選択</th> <th>名前</th> </tr> <div id="aaaItems"> <tr> <td><span id="hogeString" te:escape="false">hogeString</span></td> <td><span id="name">name</span></td> </tr> </div> </table>
ホントはもっとスマートな方法があると思うので、
誰かわかる方は教えてください・・m(..)m
以上
クエリストリング
パラメータにプロパティと同じ名称を設定すると、
自動で値を設定してくれるのはとても便利なのだが、
<a id="goHoge" href="hoge.html?id=id">リンク</a>
値(=の後ろ)の方ではなく、変数(=の前)の方でマッピングしているので、
例えば、次の画面でidというパラメータ名でhogeIdの値を設定したい場合等に
ちょっと不便です・・(TДT)
<a id="goMoge" href="moge.html?id=hogeId">リンク2</a>
↑この場合、idの値が設定される。
ゆえにDynamic Propertyを用いて回避策を用いている。
public String getGoMogeHref() {
return "moge.html?id=" + hogeId;
}
以上
コンボ初期ラベル(nullLabel)
Teedaでコンボボックスを表示すると、
デフォルトでnullLabelに「選択してください」と表示される。
このnullLabelの変更方法をまとめてみた。
参考にさせていただいたURL http://http://d.hatena.ne.jp/Hnoss/20070618/1182134530 m( )m
■方法その1:nullLabelを出なくする
対象のプロパティに必須バリデーションを付ける。
@Required
public void setHoge(String hoge) {
this.hoge = hoge;
}
■方法その2:nullLabelを独自のものに変更する
ただし全てのコンボボックスに適用されるので注意!
(customiser.dicon)
<component class="org.seasar.teeda.extension.util.NullLabelStrategyImpl">
<property name="forceNullLabel">
@org.seasar.teeda.extension.util.NullLabelStrategy@FORCE_NULL_LABEL
</property>
</component>
(appMessages_ja.properties)
org.seasar.teeda.extension.component.TSelect.NULL_LABEL=選択しろや(゚Д゚)ゴルァ
以上
ForEachの入れ子
プロパティ名に 「xxItems」 とつければ、入れ子も可能。
●sample.html
<div id="hogeItems">
<table>
<tr>
<th><span id="userName">userName</span></th>
</tr>
<div id="mogeItems">
<tr>
<td><span id="address">address</span></td>
</tr>
<tr>
<td>span id="mail">mail</span></td>
</tr>
</div>
</table>
</div>
(以下いずれもgetter/setter略)
●SamplePage.java
private HogeDto hogeItems;
private MogeDto mogeItems;
●HogeDto.java
private String userName;
private MogeDto[] mogeItems;
●MogeDto.java
private String address;
private String mail;
以上