リクエストパラメータからbeanへの変換 その2

ActionFormのフィールドをintにして画面からは「a」と入力した場合、

Struts 1.2.9では、

  • BeanUtils#populate
  • BeanUtilsBean#populate
  • BeanUtilsBean#setProperty
  • ConvertUtilsBean#convert
  • IntegerConverter#convert

と処理が流れ、IntegerConverter#convertでNumberFormatExceptionが発生するが、
以下のようにcatchしてデフォルト値(0)にしている。

        try {
            return (new Integer(value.toString()));
        } catch (Exception e) {
            if (useDefault) {
                return (defaultValue);
            } else {
                throw new ConversionException(e);
            }
        }

SAStrutsの場合は、IntegerConversionUtilでIntegerにしようとしてNumberFormatExceptionが発生するが、特に何もしない。

Caused by: org.seasar.framework.beans.IllegalPropertyRuntimeException: [ESSR0059]クラス(sample.action.LoginAction$$EnhancedByS2AOP$$3680c1)のプロパティ(userName)の設定に失敗しました。理由はjava.lang.NumberFormatException: For input string: "a"
at org.seasar.framework.beans.impl.PropertyDescImpl.setValue(PropertyDescImpl.java:251)
at org.seasar.struts.action.S2RequestProcessor.setSimpleProperty(S2RequestProcessor.java:377)
at org.seasar.struts.action.S2RequestProcessor.setProperty(S2RequestProcessor.java:312)
at org.seasar.struts.action.S2RequestProcessor.processPopulate(S2RequestProcessor.java:284)
... 45 more
Caused by: java.lang.NumberFormatException: For input string: "a"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
at java.lang.Integer.parseInt(Integer.java:447)
at java.lang.Integer.(Integer.java:620)
at org.seasar.framework.util.IntegerConversionUtil.toInteger(IntegerConversionUtil.java:74)
at org.seasar.framework.util.IntegerConversionUtil.toInteger(IntegerConversionUtil.java:56)
at org.seasar.framework.util.IntegerConversionUtil.toInteger(IntegerConversionUtil.java:38)
at org.seasar.framework.util.NumberConversionUtil.convertPrimitiveWrapper(NumberConversionUtil.java:69)
at org.seasar.framework.beans.impl.PropertyDescImpl.convertPrimitiveWrapper(PropertyDescImpl.java:294)
at org.seasar.framework.beans.impl.PropertyDescImpl.convertIfNeed(PropertyDescImpl.java:275)
at org.seasar.framework.beans.impl.PropertyDescImpl.setValue(PropertyDescImpl.java:241)