struts2のognl.NoSuchPropertyException
struts2でこのようなログが出力されることがあります。
WARN com.opensymphony.xwork2.ognl.OgnlValueStack - Error setting expression 'columnInfo.id' with value '[Ljava.lang.String;@716f5d2f' ognl.NoSuchPropertyException: entity.ColumnInfo.id(プロパティ名です) at ognl.ObjectPropertyAccessor.setProperty(ObjectPropertyAccessor.java:166) at com.opensymphony.xwork2.ognl.accessor.ObjectAccessor.setProperty(ObjectAccessor.java:27) at ognl.OgnlRuntime.setProperty(OgnlRuntime.java:2332)
基本的には気にしなくていいのでログレベルを上げていいです。
log4Jだと
log4j.logger.com.opensymphony.xwork2.ognl.OgnlValueStack=ERROR
このログは、リクエストパラメータに設定されたパラメータ名と値の組み合わせから対応するプロパティに値をセット使用とした際に何らかの理由でできない場合に出力されます。
具体的には、数値のプロパティ(フィールド)に文字列がセットされていたり、空文字で送られた場合もこのログが出力されます。
ではなぜこれを気にしなくてもいいのかというと、
- 数値プロパティ=空文字でリクエストがきた場合は単純にnullとして考えればよい(プリミティブの場合は除く)。
- 数値プロパティ(例えばInteger)に空でない文字列(例えば"hoge")でリクエストがきた場合は、バリデーションエラーとして扱ってくれるためそのハンドリングをすれば十分です。
http://struts.apache.org/release/2.3.x/docs/type-conversion.html
Some properties cannot be set to null. Primitives like boolean and int cannot be null. If your action needs to or will accept null or blank values, use the object equivalents Boolean and Integer. Similarly, a blank string "" cannot be set on a primitive. At the time of writing, a blank string also cannot be set on a BigDecimal or BigInteger. Use server-side validation to prevent invalid values from being set on your properties (or handle the conversion errors appropriately).
以上