1

SO でこれに関するすべての質問を読み、公式の Struts 2 ファイル アップロード ドキュメントに注意深く従いましたが、まだ問題があります。アクションはエラーなしで完了しますが、アクション内の 3 つのファイル プロパティが常に null であるため、アップロードされたファイルをキャッチできないようです。fileUploadInterceptor がその仕事をしていないようです。これが私のコードです:

アクション マッピング:

<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;
    }
}
4

2 に答える 2

2

アクションのインターセプターを定義するときは、そのアクションのすべてのインターセプターを定義する必要があります。

つまり、アクションでは現在、ファイル インターセプターという 1 つのインターセプターしか実行されていません。

リンクされたページの構成には、ファイルインターセプターのみが含まれているわけではないことに注意してください。

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>
于 2013-01-09T13:33:43.580 に答える
0

あなたの問題に関しては、ファイル upload.xml を struts.xml に含めることができます。

<struts>

    <include file="fileupload.xml"></include>
   <package name="default" extends="struts-default">
        <!-- file upload  -->
        <action name="upload" class="com.action.FileUpload">
    <result  name="success">success.jsp</result>
        <result name="error">error.jsp</result>
        </action>

    </package>
</struts>

このファイル upload.xml には、インターセプター参照が含まれている必要があります...

<struts>
    <package name="fileUploadPackage" extends="struts-default">
        <interceptors>
                      -------------
                      -------------
      <interceptor-ref name="fileUpload">
        <param name="maximumSize">your file size</param>
    <param name="allowedTypes">image/jpeg,image/gif,image/png</param>
    </interceptor-ref>
                     ------------------
                     ------------------
                </interceptors>


    </package>
</struts>

また、別の方法でも実行できます。この URLファイルのアップロードを確認してください。

于 2013-01-10T05:57:58.787 に答える