読者です 読者をやめる 読者になる 読者になる

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

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

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

画面の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. テキストエリアコンポーネント」がちょうどいいかな。他のフレームワークはどうなってんのかな。ちょっと調べてみよう。