[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 メーリングリストの案内