[Seasar-user:13404] sa-strutsでの複数ファイルアップロードについて

宇枝 祐樹 [E-MAIL ADDRESS DELETED]
2008年 3月 25日 (火) 10:34:57 JST


お世話になっております。
上田と申します。

今作業している開発案件でファイルを複数アップロード機能があるのですが
実装について情報お持ちの方、ご教授いただけないでしょうか。

アップロード数が可変の為、アクションクラスでFormFile型のフィールドを配列で
取得しようとしているのですが、フィールドにセットする際に
org.seasar.framework.beans.IllegalPropertyRuntimeException
が発生してしまいます。

javascriptでダミーデータを入れてみてたりしましたが同じ結果です。
配列で持つことをサポートしていないのでしょうか。

環境
Seasar2 2.4.22
sa-struts1.0.1
Java1.5.0_14
Tomcat6.0.16

実装サンプル
<JSP>
<c:forEach var="fileArea" begin="0" end="${アップロード可能数}">
<html:file property="attachFile"/>
</c:forEach>

<Actionクラス>
public class AddFileAction {

@Required (target = "confirm")
@Binding(bindingType = BindingType.NONE)
public FormFile attachFile[];

@Execute(validator = false)
public String confirm() {

}
}

<エラー>

*例外*

org.seasar.framework.beans.IllegalPropertyRuntimeException: [ESSR0059]クラス(******.AddFileAction)のプロパティ(attachFile)の設定に失敗しました。理由はorg.seasar.framework.beans.IllegalPropertyRuntimeException: [ESSR0059]クラス(******.AddFileAction$$EnhancedByS2AOP$$e86f41)のプロパティ(attachFile)の設定に失敗しました。理由はorg.seasar.framework.exception.SIllegalArgumentException: [ESSR0094]IllegalArgumentExceptionがクラス(******.AddFileAction)の型(class [Lorg.apache.struts.upload.FormFile;)のフィールド(attachFile)に型(org.apache.struts.upload.CommonsMultipartRequestHandler$CommonsFormFile)の値()を設定するときに発生しました。対象のクラスは(******.AddFileAction$$EnhancedByS2AOP$$e86f41)です。
	org.seasar.struts.action.S2RequestProcessor.processPopulate(S2RequestProcessor.java:287)
	org.seasar.struts.action.S2RequestProcessor.process(S2RequestProcessor.java:95)
	org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
	org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
	org.seasar.framework.container.hotdeploy.HotdeployFilter.doFilter(HotdeployFilter.java:70)
	org.seasar.framework.container.filter.S2ContainerFilter.doFilter(S2ContainerFilter.java:77)
	org.seasar.struts.filter.RoutingFilter.forward(RoutingFilter.java:175)
	org.seasar.struts.filter.RoutingFilter.doFilter(RoutingFilter.java:70)
	org.seasar.framework.container.hotdeploy.HotdeployFilter.doFilter(HotdeployFilter.java:70)
	org.seasar.framework.container.filter.S2ContainerFilter.doFilter(S2ContainerFilter.java:77)
	org.seasar.extension.filter.EncodingFilter.doFilter(EncodingFilter.java:69)

*原因*

org.seasar.framework.beans.IllegalPropertyRuntimeException: [ESSR0059]クラス(******.AddFileAction$$EnhancedByS2AOP$$e86f41)のプロパティ(attachFile)の設定に失敗しました。理由はorg.seasar.framework.exception.SIllegalArgumentException: [ESSR0094]IllegalArgumentExceptionがクラス(******.AddFileAction)の型(class [Lorg.apache.struts.upload.FormFile;)のフィールド(attachFile)に型(org.apache.struts.upload.CommonsMultipartRequestHandler$CommonsFormFile)の値()を設定するときに発生しました。対象のクラスは(******.AddFileAction$$EnhancedByS2AOP$$e86f41)です。
	org.seasar.framework.beans.impl.PropertyDescImpl.setValue(PropertyDescImpl.java:251)
	org.seasar.struts.action.S2RequestProcessor.setSimpleProperty(S2RequestProcessor.java:366)
	org.seasar.struts.action.S2RequestProcessor.setProperty(S2RequestProcessor.java:312)
	org.seasar.struts.action.S2RequestProcessor.processPopulate(S2RequestProcessor.java:284)
	org.seasar.struts.action.S2RequestProcessor.process(S2RequestProcessor.java:95)
	org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
	org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
	org.seasar.framework.container.hotdeploy.HotdeployFilter.doFilter(HotdeployFilter.java:70)
	org.seasar.framework.container.filter.S2ContainerFilter.doFilter(S2ContainerFilter.java:77)
	org.seasar.struts.filter.RoutingFilter.forward(RoutingFilter.java:175)
	org.seasar.struts.filter.RoutingFilter.doFilter(RoutingFilter.java:70)
	org.seasar.framework.container.hotdeploy.HotdeployFilter.doFilter(HotdeployFilter.java:70)
	org.seasar.framework.container.filter.S2ContainerFilter.doFilter(S2ContainerFilter.java:77)
	org.seasar.extension.filter.EncodingFilter.doFilter(EncodingFilter.java:69)

*原因*

org.seasar.framework.exception.SIllegalArgumentException: [ESSR0094]IllegalArgumentExceptionがクラス(******.AddFileAction)の型(class [Lorg.apache.struts.upload.FormFile;)のフィールド(attachFile)に型(org.apache.struts.upload.CommonsMultipartRequestHandler$CommonsFormFile)の値()を設定するときに発生しました。対象のクラスは(******.AddFileAction$$EnhancedByS2AOP$$e86f41)です。
	org.seasar.framework.util.FieldUtil.set(FieldUtil.java:164)
	org.seasar.framework.beans.impl.PropertyDescImpl.setValue(PropertyDescImpl.java:248)
	org.seasar.struts.action.S2RequestProcessor.setSimpleProperty(S2RequestProcessor.java:366)
	org.seasar.struts.action.S2RequestProcessor.setProperty(S2RequestProcessor.java:312)
	org.seasar.struts.action.S2RequestProcessor.processPopulate(S2RequestProcessor.java:284)
	org.seasar.struts.action.S2RequestProcessor.process(S2RequestProcessor.java:95)
	org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
	org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
	org.seasar.framework.container.hotdeploy.HotdeployFilter.doFilter(HotdeployFilter.java:70)
	org.seasar.framework.container.filter.S2ContainerFilter.doFilter(S2ContainerFilter.java:77)
	org.seasar.struts.filter.RoutingFilter.forward(RoutingFilter.java:175)
	org.seasar.struts.filter.RoutingFilter.doFilter(RoutingFilter.java:70)
	org.seasar.framework.container.hotdeploy.HotdeployFilter.doFilter(HotdeployFilter.java:70)
	org.seasar.framework.container.filter.S2ContainerFilter.doFilter(S2ContainerFilter.java:77)
	org.seasar.extension.filter.EncodingFilter.doFilter(EncodingFilter.java:69)

*原因*

java.lang.IllegalArgumentException
	sun.reflect.UnsafeObjectFieldAccessorImpl.set(UnsafeObjectFieldAccessorImpl.java:63)
	java.lang.reflect.Field.set(Field.java:656)
	org.seasar.framework.util.FieldUtil.set(FieldUtil.java:159)
	org.seasar.framework.beans.impl.PropertyDescImpl.setValue(PropertyDescImpl.java:248)
	org.seasar.struts.action.S2RequestProcessor.setSimpleProperty(S2RequestProcessor.java:366)
	org.seasar.struts.action.S2RequestProcessor.setProperty(S2RequestProcessor.java:312)
	org.seasar.struts.action.S2RequestProcessor.processPopulate(S2RequestProcessor.java:284)
	org.seasar.struts.action.S2RequestProcessor.process(S2RequestProcessor.java:95)
	org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
	org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
	org.seasar.framework.container.hotdeploy.HotdeployFilter.doFilter(HotdeployFilter.java:70)
	org.seasar.framework.container.filter.S2ContainerFilter.doFilter(S2ContainerFilter.java:77)
	org.seasar.struts.filter.RoutingFilter.forward(RoutingFilter.java:175)
	org.seasar.struts.filter.RoutingFilter.doFilter(RoutingFilter.java:70)
	org.seasar.framework.container.hotdeploy.HotdeployFilter.doFilter(HotdeployFilter.java:70)
	org.seasar.framework.container.filter.S2ContainerFilter.doFilter(S2ContainerFilter.java:77)
	org.seasar.extension.filter.EncodingFilter.doFilter(EncodingFilter.java:69)




Seasar-user メーリングリストの案内