プログラマってこんなかんじ??

アプリ作ったり歌ったりしてます

画面で"null"(文字列)入力するとPageクラスでバインドされない

Teeda で画面の textarea 等に "null" (文字列) と入力すると、Pageクラスの該当フィールドにいま入力した"null"(文字列)がバインドされない現象があって。どっかで制御されてるのかなーと思ってソース追っかけてみた。Teeda の仕様かと思ってたら Seasar 本体の仕様だった。

該当箇所は ServletRequestParameterMap.java のここ。

protected Object getAttribute(final String key) {
   if (parameterNames.contains(key)) {
       final String value = request.getParameter(key);
       if (NULL.equals(value)) {
           return "";
       }
       return value;
   }
   return null;
}
ServletRequestParameterMap#getAttributeの取得値が
"null"(文字列)だった場合は""(空文字)を返却する

っていうロジックが思いっきり。

Teeda の場合。

  • RESTORE_VIEWフェーズでこのMapオブジェクトを作成。
  • UPDATE_MODEL_VALUESフェーズでこのMap#getAttributeした値をPageクラスの該当フィールドにバインド。

なのでこうなっちゃうわけですね。なるほど。

簡単に試すなら teeda-html-sampleの「13. テキストエリアコンポーネント」がちょうどいいかな。他のフレームワークはどうなってんのかな。ちょっと調べてみよう。