6

次のような状況があります。CommonsMultipartResolver Bean を次のように構成しました。

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

また、Spring Web Flow ビュー ステート jsp にいくつかのファイル アップロード フィールドがあります。

ファイルが制限を下回っている場合はすべて正常に機能しますが、ファイルが 2MB-s の制限を超えている場合は、フォームのバインド結果に検証エラーを追加する必要があります。

私の問題は、マルチパート ファイル リゾルバーがファイル制限を超えたときに org.apache.commons.fileupload.FileUploadBase.SizeL imitExceededException 例外をスローし、Spring Web Flow でこれをキャッチして FieldError を形。

transition タグの on-exception 属性を使ってみたのですが、正しく理解すれば Spring Web Flow 内でスローされた例外に対してしか機能しません。

また、Spring MVC で SimpleMappingExceptionResolver を使用しようとしましたが、ページにリダイレクトしたくないので、この例外を処理したいと考えています。

これも見つけました: https://jira.springsource.org/browse/SWF-158

しかし、それはバージョン 1.0 からのものであり、これが組み込まれたか、これらの状況を処理するためのより良い方法が見つかったと思います。

これに対処する方法についてのアイデアは大歓迎です。

ありがとう。

4

1 に答える 1

4

あなたの中で、あなたはメソッドをオーバーライドし、キャッチされている例外タイプを決定し、適切に処理する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).
    }
}

「verification/psv / consent」は、この例外がスローされたはずのフローであり、そこに戻る必要があることに注意してください。ファイルがアップロードされているページは1つだけです。

明らかに、errorMessageはビューに渡される単なるパラメータであるため、エラーメッセージのように処理および表示する必要があります。また、送信された他のフォームフィールドに再入力する必要がある場合もあります。うまくいけば、これは正しい方向へのポイントです。

于 2012-11-08T18:25:27.780 に答える