0

私は春のJavaベースのWebアプリを持っています。

ある場所では、ユーザーがフォームに入力し、各フィールドを読み取ってajax呼び出しを行うjavascriptコードを持っています。

Springはそれを関連する関数にマップするようになりました。ここまでは元気です。

ここで、ajax呼び出しの引数の数を減らしたいと思います。では、javaがマップできるjavascriptのマップのようなものはありますか?

これは、正常に機能するマップのないコードです。

       firstName = $('#firstName').val();
       lastName = $('#lastName ').val();
       address = $('#address ').val();      
        $.ajax({
        type: 'POST',
        url: location.href + 'MyApp/'+currentTabName+'/getResults',
        data: ({firstName:firstName, lastName:lastName, address:address}),
        success:function(data) {
            $('#searchResults').html(data);
        }
    });     

コントローラ側のJavaコード:

    @RequestMapping(value = "/Search/getResults", method = RequestMethod.POST)
    public ModelAndView getResults(@RequestParam("ticker") String ticker,
        @RequestParam("searchMap") Object searchMap,
        @RequestParam("dateRange") String dateRange,
        @RequestParam("inMarquee") boolean inMarquee, HttpServletRequest request,
        HttpServletResponse response) {
//code to process the arguments received
}

これは私にとってはうまくいきます。

ここで、3つの引数すべてを1つのマップに入れてから、Javaコードに送信します。

だから私は以下のコードを書いた:

        var map =[];
        map[ firstName] = $('#firstName').val();
      map[ lastName ]= $('#lastName ').val();
       map[address ]= $('#address ').val();     
        $.ajax({
        type: 'POST',
        url: location.href + 'MyApp/'+currentTabName+'/getResults',
        data: ({map:map}),
        success:function(data) {
            $('#searchResults').html(data);
        }
    });     

コントローラ側のJavaコード:

    @RequestMapping(value = "/Search/getResults", method = RequestMethod.POST)
    public ModelAndView getResults(@RequestParam("map") Map<String,String map,
        HttpServletRequest request,
        HttpServletResponse response) {
//code to process the arguments received
}

コードを実行すると、次のエラーが発生します。

 Resolving exception from handler [public org.springframework.web.servlet.ModelAndView com.Controller.getResults(java.util.Map,javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse)]: org.springframework.web.bind.MissingServletRequestParameterException: Required Map parameter 'map' is not present

これは、すべてのJavaベースのWebアプリにとって非常に基本的なニーズだと思います。しかし、私は初めてこの事件に到達しました。したがって、この問題を回避する方法についての意見を共有してください。マップに行きたい理由は、フィールドの数であり、フィールドの組み合わせはさまざまです。そのため、組み合わせごとにajax呼び出しを記述できません。

4

2 に答える 2

2

フォームの場合は、serialize()関数を使用して POST データを自動的に作成できます。したがって、$.ajax次のように書くことができます。

$.ajax({
  type: 'POST',
  url: [a link],
  data: $('#formId').serialize(),
  success: function(data) {...}
});

さらに、サーバー側では、対応するメソッドで@RequestBodyアノテーションを使用FormHttpMessageConverterして、パラメーターを MultiValueMap に変換できます。

または、フォームに対応するオブジェクトがある場合は、 を使用@ModelAttributeしてフォームをオブジェクトにマップできます。

詳細については、ここを参照してください: Spring Web MVC フレームワーク

于 2012-11-16T15:17:39.773 に答える
2

コードをコピーして貼り付けてください。再入力しないでください。
コードをコピーして貼り付けた場合、正しく機能していません。

   firstName = $('#firstName').val();
   lastName = $('#firstName').val();
   address = $('#firstName').val();     

lastNameとの入手先に注意してaddressください

于 2012-11-16T15:15:54.480 に答える