私は春の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呼び出しを記述できません。