java - Struts 2 文件上传 - 实际文件属性为空

标签 java file-upload struts2

我在 SO 上阅读了所有与此相关的问题,并仔细遵循了 official Struts 2 file upload docs但我仍然有问题。该操作完成时没有错误,但我似乎无法捕获上传的文件,因为操作内的 3 个文件属性始终为空。就像 fileUploadInterceptor 没有完成它的工作一样。这是我的代码:

Action 映射:

<action name="merchantSaveOrUpdate" class="merchantSaveOrUpdateAction">
    <interceptor-ref name="fileUpload">
        <param name="allowedTypes">image/jpeg,image/gif,image/png</param>
    </interceptor-ref> 
    <result name="success" type="redirectAction">merchantList</result>
</action>

jsp:

<s:form action="merchantSaveOrUpdate" method="POST" enctype="multipart/form-data">
    <label>Merchant Name</label> <input type="text" value="${merchant.name}" name="name"><br />
    <label>Merchant Logo</label> <s:file name="logo" /> <br />
    <s:submit class="btn submit" />
</s:form>

行动:

public class MerchantSaveOrUpdateAction extends ActionSupport {

    private File logo;
    private String logoContentType;
    private String logoFileName;
    private String name;

    public File getLogo () {
        return logo;
    }

    public void setLogo ( File logo ) {
        this.logo = logo;
    }

    public String getLogoContentType () {
        return logoContentType;
    }

    public void setLogoContentType ( String logoContentType ) {
        this.logoContentType = logoContentType;
    }

    public String getLogoFileName () {
        return logoFileName;
    }

    public void setLogoFileName ( String logoFileName ) {
        this.logoFileName = logoFileName;
    }

    public String getName () {
        return name;
    }

    public void setName ( String name ) {
        this.name = name;
    }

    public String execute() throws Exception {

        String result = super.execute();

        // the problem is here - name is populated, but the 3 logo properties are null

        return result;
    }
}

最佳答案

当您为某个操作定义拦截器时,您必须为该操作定义所有拦截器。

换句话说,您的操作当前仅运行一个拦截器,即文件拦截器。

请注意,链接页面上的所有配置均不包含文件拦截器。

defaultStack 包含文件拦截器。该操作可以这样配置:

<action name="merchantSaveOrUpdate" class="merchantSaveOrUpdateAction">
    <interceptor-ref name="defaultStack">
        <param name="fileUpload.allowedTypes">image/jpeg,image/gif,image/png</param>
    </interceptor-ref> 
    <result name="success" type="redirectAction">merchantList</result>
</action>

关于java - Struts 2 文件上传 - 实际文件属性为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14236259/

相关文章:

java - 使用 http 客户端发布 tar.gz 文件时出错,但使用 curl 命令可以正常工作

java - 流 - 过滤器中的任何匹配都会产生 IllegalStateException

ruby-on-rails - 使用回形针将文件直接上传到S3

java - 无法在struts2中通过jdbc从数据库存储和检索图像数据

jquery - 如何手动加载jqgrid中的数据?

java - 避免在有向图中创建重复顶点(使用 jgrapht)

java - IllegalStateException 的预期用途是什么?

django - 服务器端只接受FileField中的某种文件类型

apache-flex - Flex 是一个好的选择吗?

java - 我应该如何初始化类 freemarker.template.Configuration?