以下のようにInteger型のmonthフィールドをbindした場合、画面から入力値を空にしてもmonthには0が入ったままになり、nullにはならない。
<h:inputText id="month" value="#{controller.month}" styleClass="inputText inputText-date">
<f:ajax execute="#{execute}" event="change" />
</h:inputText>月
原因はEL parserのバグで、EL parser内では値をintで扱っているので、nullを0に変換しているから。
以下のJVM Optionを追加すると直る。
-Dorg.apache.el.parser.COERCE_TO_ZERO=false
これはしょっぱいバグだなあ。。
参考: