Modelの値が空文字列になる場合と、nullになる場合と

はじめに

 先日、「Modelの値が空文字列になるコードと、nullになるコードがあるんだけど」という話が話題に上がりました。
 「何時そうなるのか?」は置いておいて、「なぜそんなことが起きるのか?」という辺りを調べたのでメモ。

環境

なぜそんなことが起きるのか?

 秘密は、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にしたい」は出来そうですけどね。