1

我正在尝试在 Struts 2 应用程序中上传多个文件,但每次我得到File[] fileUpload的是空的。我已经进行了一些配置更改,struts.xml但仍然将fileUplaodobject 设置为 anynull或 empty 。有人能告诉我我该怎么做才能让它工作吗

相应的操作代码如下:在此操作中,我正在检索文件对象数组并打印详细信息

编辑 :

DummyFileUploadAction.java

package com.cbuddy.common.action;

import java.io.File;                    
import com.opensymphony.xwork2.ActionSupport;

public class DummyFileUploadAction extends ActionSupport{
    
    private File[] fileUpload;
    private String fileUploadFileName;
    private String[] fileUploadContentType;
 
   
    public File[] getFileUpload() {
        return fileUpload;
    }

    public void setFileUpload(File[] fileUpload) {
        this.fileUpload = fileUpload;
    }

    public String getFileUploadFileName() {
        return fileUploadFileName;
    }

    public void setFileUploadFileName(String fileUploadFileName) {
        this.fileUploadFileName = fileUploadFileName;
    }

    public String[] getFileUploadContentType() {
        return fileUploadContentType;
    }

    public void setFileUploadContentType(String[] fileUploadContentType) {
        this.fileUploadContentType = fileUploadContentType;
    }

    @Override
    public void validate() {

        if (null == fileUpload) {
            System.out.println("DummyFileUploadAction.validate()");
        }
    }
    
    public String uplaod(){
        return "success";
    }
    public String execute() throws Exception{
     
    for (File file: fileUpload) {
    System.out.println("File :" + file);
    }
     
    for (String fileContentType: fileUploadContentType) {
    System.out.println("File type : " + fileContentType);
    }
     
    return SUCCESS;
     
    } 
}

            

struts.xml是:我能够使用相同的配置集获取单个文件上传的文件对象struts.xml

struts.xml

<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>
    <constant name="struts.enable.DynamicMethodInvocation" value="false" />
    <constant name="struts.devMode" value="true" />
    <constant name="struts.custom.i18n.resources" value="ApplicationResources" />
    <constant name="struts.multipart.maxSize" value="1000000" />

    <package name="default" extends="struts-default,json-default" namespace="/">

<action name="upload" class="com.cbuddy.common.action.DummyFileUploadAction" method="uplaod">
            <result name="success">/uplaod.jsp</result>
</action>
        
        <action name="dummyUpload" class="com.cbuddy.common.action.DummyFileUploadAction" >
            <interceptor-ref name="fileUpload">
             <param name="allowedTypes">image/jpeg,image/gif,image/png</param>
             </interceptor-ref>
            <interceptor-ref name="defaultStack"></interceptor-ref>
            <result name="success">/success.jsp</result>
            <result name="input">/uplaod.jsp</result>
            
    
</action>   
    </package>
</struts>
        

然后success.jsp在成功打印文件详细信息后呈现。

4

1 回答 1

0

如果你想向fileUpload拦截器添加参数,你应该通过引用 adefaultStack并使用拦截器的名称来为参数名称添加前缀或重建默认堆栈,但你不应该fileUpload在操作配置中复制拦截器。例如

<action name="dummyUpload" class="com.cbuddy.common.action.DummyFileUploadAction" >
    <interceptor-ref name="defaultStack">
       <param name="fileUpload.allowedTypes">image/jpeg,image/gif,image/png</param>
    </interceptor-ref>
    <result name="success">/success.jsp</result>
    <result name="input">/uplaod.jsp</result>
</action>   
于 2014-08-30T12:13:58.590 回答