0

フォームがあり、ajax 呼び出しを使用して送信しています。フォーム フィールドを検証するために jsr 303 Bean 検証を使用しています。フィールドを検証できるようになりましたが、検証エラーが発生すると、json エラー メッセージが表示されます。それぞれのタイプでレポートを生成しようとしています.私の大きな問題は、検証が失敗した場合にjsonエラーメッセージを生成する方法です.コントローラークラスの私のコードは以下のとおりです.

@RequestMapping(value = "pdf", method = { RequestMethod.POST, RequestMethod.GET })

    public ModelAndView generatePdfReport(@ModelAttribute("reports") @Valid ReportsCommand model, BindingResult result, ModelAndView modelAndView,
            HttpServletRequest request, HttpServletResponse response) throws Exception {


        if (result.hasErrors()) {
            System.out.println("Error in call type value123");

           // return new ModelAndView(new RedirectView("../pages/report/main.jsp?module=report&page=fluctuations"));
            throw new BindException(result);
        } 
        else {
          .....
           return modelAndView;
           }
          }

私のモデルクラスでは、以下のフィールドを検証しています

@Size(min = 2, max = 3, message = "calltype must between 2 to 3 Characters.")
    private String callType;

result.hasErrors が true の場合、json エラー メッセージを生成したいのですが、これを行うにはどうすればよいですか...

4

2 に答える 2

0

あなたのケースは単純ではありません。コントローラーで定義されたすべてのメソッドは、1 つのタイプのビューのみを返すことができます。

たとえば、json レスポンスを返したい場合、コントローラーのメソッドには @ResponseBody アノテーションが必要です。

  public @ResponseBody Report generatePdfReport(@ModelAttribute("reports") @Valid ReportsCommand model, BindingResult result, ModelAndView modelAndView, HttpServletRequest request, HttpServletResponse response) throws Exception { 
    return new Report();
  }

検証結果が表示されるビューに応答を転送する場合は、ModelAndView の戻り値の型を使用する必要があります。

同じコントローラー メソッドに対して 2 つの異なる応答タイプを使用することはできません。検証とレポート生成を 2 つの異なるステップに分割することをお勧めします。

幸運を !

于 2012-06-15T13:37:27.450 に答える
0

JSONでそのようなことを試したことはありません。私はその多くについて知りません。ただし、コントローラー メソッドでいくつかの変更を行う必要があります。お気に入り、

戻り値の型をvoidではなく に変更しModelAndViewます。メソッド シグネチャに、もう 1 つのパラメータを として追加します HttpServletResponse response。そして、 を使用してエラー データを書き込む必要がありますresponse.getWriter().write(//something here);

また、ajax 応答では、コントローラーから渡した文字列エラー メッセージを取得できます。

これがお役に立てば幸いです。乾杯。

于 2012-06-15T13:32:06.640 に答える