5

私は次のような状況があります。私はCommonsMultipartResolver Beanを次のように設定しました。Spring WebFlowのCommonsMultipartResolverからSizeLimitExceededExceptionを処理する方法は?

<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> 
<property name="maxUploadSize" value="2100000" /> 

そして私は春のWebフロービューステートのJSPのいくつかのファイルアップロードフィールドを持っています。

ファイルが制限値以下であればすべて正常に動作しますが、ファイルが2MB-sの制限を超えると、フォームのバインド結果に検証エラーを追加する必要があります。

私の問題は、ファイルの制限を超えてSpring Web Flowでこれをキャッチして追加する方法が見つからない場合、マルチパートファイルリゾルバがorg.apache.commons.fileupload.FileUploadBase.SizeL imitExceededException例外をスローすることです私のFieldErrorフォームに。

私はトランジションタグのon-exception属性を使用しようとしましたが、正しく理解すれば、Spring Web Flow内でスローされる例外に対してのみ機能します。

また、SpringMvcでSimpleMappingExceptionResolverを使用しようとしましたが、ページにリダイレクトしたくないので、この例外を処理したいと思います。 https://jira.springsource.org/browse/SWF-158

しかし、それは、バージョン1.0からだと私はこれがあるためか、より良い方法は、これらの状況を処理することが見出されたことを組み込まれていることを仮定している:

また、私はこれを見つけました。

これをどう対処するかについてのご意見は、大変ありがたく思っています。

ありがとうございました。

答えて

3

SimpleMappingExceptionResolverでは、resolveExceptionメソッドをオーバーライドして、キャッチされた例外の種類を判断して適切に処理できるはずです。

私のプロジェクトでは、同様の例外の解決策と思われる古いコードがいくつか見つかりました。

public class GeneralMappingExceptionResolver extends SimpleMappingExceptionResolver { 

@Override 
public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception exception) { 

    if(exception instanceof MaxUploadSizeExceededException) { 
     MaxUploadSizeExceededException maxe = (MaxUploadSizeExceededException)exception; 
     String errorMessage = "Max filesize exceeded, please ensure filesize is too large."); 
     HashMap<String, Object> model = new HashMap<String, Object>(2); 
     model.put("errorMessage", errorMessage); 
     return new ModelAndView("verification/psv/consent", model); 
    } else { 
     return super.resolveException(request, response, handler, exception); // Do whatever default behaviour is (ie throw to error page). 
    } 
} 

「検証/ PSV /同意」は、この例外がスローされたから、それがに返す必要がありますされていた流れであることに注意してください。私たちは、ファイルをアップロードした1ページしか持っていません。

もちろん、errorMessageはビューに渡されるパラメータなので、エラーメッセージのように処理して表示する必要があります。また、提出された他のフォームフィールドを再度入力する必要があります。うまくいけば、これは正しい方向のポイントです。

関連する問題