Modelの値が空文字列になる場合と、nullになる場合と
はじめに
先日、「Modelの値が空文字列になるコードと、nullになるコードがあるんだけど」という話が話題に上がりました。
「何時そうなるのか?」は置いておいて、「なぜそんなことが起きるのか?」という辺りを調べたのでメモ。
環境
- Wicket 1.3.6
なぜそんなことが起きるのか?
秘密は、FormComponent#convertInput()にあります。
このメソッド中にModelの型によって、入力値を変換するためのロジックが存在します。
で、このときにModelの型が分からないと、FormComponent#convertValue(String[])が呼ばれて、未入力の場合、入力値の変換結果がnullになるのです。
FormComponent#convertValue(String[])の実装を以下に引用します。
protected Object convertValue(String[] value) throws ConversionException { return value != null && value.length > 0 && value[0] != null ? trim(value[0]) : null; }
最後に
これをみて「未入力かつModelがStringの場合、常に空文字列にしたい」というのはどうするのだろう?と思ったのですが、そこは調べてません。
「未入力かつModelがStringの場合、常にnullにしたい」は出来そうですけどね。