リクエストパラメータから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)