我有基于 Spring Java 的网络应用程序。
在其中一个地方,用户将填写一张表格,我有一段 javascript 代码,它将读取每个字段并进行 ajax 调用。
Spring 现在将其映射到相关函数。到目前为止,我都很好。
现在我想减少 ajax 调用中的参数数量。那么在javascript中有什么东西可以映射到java中的map吗?
这是没有地图的代码,可以正常工作。
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
}
这对我来说很好。
现在我想将所有三个参数放入一张地图中,然后发送到 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 调用。