2013-01-31 90 views
-1

我已經在struts2中設置了屬性"struts.multipart.maxSize=524288000",所以我可以將總體上傳大小限制爲該大小。當我上傳2個文件超出這個限制,從文件上傳攔截struts 2 multipart maxSize action return

org.apache.commons.fileupload.FileUploadBase$SizeLimitExceededException: the request was rejected because its size (718551153) exceeds the configured maximum (524288000) 

發生異常但是代碼沒有達到與錯誤的操作,這樣我可以從動作返回錯誤並且去我的自定義錯誤頁並顯示相應的消息。相反,它會直接導致應用程序錯誤,並且不會轉到操作的方法。

關於如何返回「錯誤」的任何建議,以便我可以得到正確的重定向?

+0

你配置你的行動來回報錯誤? –

回答

1

您需要爲您的操作配置input結果。

還可以配置fileUpload攔截與maximumSize參數爲您的操作:

<action name="..." class="..."> 
    <interceptor-ref name="defaultStack"> 
    <param name="fileUpload.maximumSize">524288000</param> 
    </interceptor-ref> 

    <result name="input">error_page</result> 
    <result>success_page</result> 
</action> 

然後,你可以通過使用該密鑰覆蓋錯誤消息的文本:

struts.messages.error.file.too.large 
+0

我已經爲我的操作配置了一個「輸入」結果,並且有一個「錯誤」結果。但由於某種原因,它並未使用它們。我不想在我的行動中設置攔截器。我希望它可以在全球範圍內工作,而不必每次都設置它。 – Panos

+0

@Panos:你可以在'struts.xml'的<攔截器>部分全局配置'fileUpload'攔截器。不使用它們是什麼意思? –

+0

通過說「不使用它們」,我的意思是我連接了調試器,並在動作的方法中放置了一些斷點。開始上傳文件,然後得到最大文件大小的異常,並且調試器從未停止在該方法中,因此它不執行該操作的方法。它繞過了它。 – Panos

0

對於「輸入」結果正常工作,您必須將Validation(org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor)和DefaultWorkflowInterceptors(com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor)設置爲par你的攔截器堆棧。

您也可以自定義一個結果的名字將被用來代替「輸入」像下面

@InputConfig(resultName = "customInputResultNameWhenValidationFails") 
public final String execute() throws Exception { 
}