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