0

私は Spring MVC 3.1 Web アプリケーションに取り組んでおり、ほとんどすべてのフォーム送信は jQuery ajax 呼び出しとフォームのシリアル化を使用して行われています。これはうまくいきます。検証エラー メッセージをサーバーから取得する方法が必要だったので、例を探しました。基本的に BindingResult オブジェクトをカスタム JsonResponse オブジェクトに配置し、@ResponseBody. これも大活躍!ここで問題が発生します。BindingResultオブジェクトは戻ってきますが、Spring:form タグを使用した場合のようにメッセージが補間されません。問題を調べたところ、カスタムのもので上書きできることがわかりましたSpringMessageSourceInterpolater。これは役に立ちましたが、実際のエラーではなく、JSR-303 検証エラーのみが補間されます。TypeMismatchSpring バインディングからのエラー。これが私がやっていることの例です:

     public @ResponseBody
     JSonResponse addQuote(@ModelAttribute("quote") @Valid QuoteBean quote, BindingResult result, HttpServletRequest request, HttpServletResponse response) throws IOException
     {
        jsonResponse = new JsonResponse();

        //Some handle code

        jsonResponse.setStatus(JsonResponse.ResponseStatus.INVALID);
        jsonResponse.setResult(result.getAllErrors());

        return jsonResponse;
     }

私が言ったように、Json は完全にシリアル化されており、JSR-303 エラーの場合、defaultMessageエラー オブジェクトのフィールドは補間されたメッセージですが、エラーが Spring の場合TypeMismatch(フィールドに入れる1のと同じように Date にバインドしています) 、代わりにSpringで生成された長いメッセージになってしまいます。オブジェクトにあるすべての に対応するメッセージ コードを追加しようとしerror.getCodes()ましたが、役に立ちませんでした ( などTypeMismatch.fieldname)。確かに誰かが Spring と Ajax を使用し、この検証が機能していましたが、答えが見つかりません。

4

1 に答える 1

1

私は同様の問題を経験しています。つまり、jQueryを使用してフォームを投稿しています。現在、次を使用して、バインディング結果をコントローラーから文字列として返しています。

return bindingResult.getAllErrors()

アプリの開発中の一時的な解決策として、返されたjsonデータを解析し、アラートポップアップにdefaultMessageを表示しています。

返されたjsondefaultmessageを何らかの方法で関連付けられたフォーム入力要素に関連付けることができましたか?

春からであろうとなかろうと、これに関するドキュメントに関してはあまり多くないので、あなたがこれをどのように(詳細に)扱ったかを聞くのは本当に熱心でしょう。

于 2012-06-23T20:31:49.377 に答える