メソッドのオーバーロードができない?

 DAOに引数違いのメソッドを定義したら、
 MethodNotFoundRuntimeExceptionでエラーになってしまう。
 両者を異なるメソッド名に定義しなおすと、正常に動くようになった。
 ・・・エラーがわかりにくい・・というかオーバーロードしちゃダメなのか・・?
 ちなみにS2Dao:1.0.44。

以上

コンボリスト作成

今日まで、コンボリストを作成するのに、
for文でお約束の処理を書いていた訳だが、
ConversionRuleアノテーションを使えば、
一発で変換できるじゃないか・・・_| ̄|○

●従来の処理
for(int i = 0; i < hogeDbItems.length; i++){
 Map map = new HashMap();
 map.put("label",hogeDbItems[i].getName());
 map.put("value",hogeDbItems[i].getId());
 hogeItems.add(map);
}

●ConversionRuleアノテーションを使った処理
[HogeDxo]
 @ConversionRule("value:id,label:name")
 List> convert(HogeDb[] entities);

[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=選択しろや(゚Д゚)ゴルァ

以上

ワイルドカード

 LIKE演算子を使用する場合にワイルドカードを用いて記述するが、
 ...name like '%/*name*/%' と記述してもうまく実行されない。
 S2Daoによると、
 バインド変数に自動的にシングルクォーテーションが付くようになっているかららしい。
 よってバインド変数自体にワイルドカードを含める("%name%")。

以上 

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;

以上