0

我有基于 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 调用。

4

2 回答 2

2

复制并粘贴您的代码,请勿重新输入。
如果您复制并粘贴代码,则它无法正常工作。

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

注意你从哪里得到你的lastNameaddress从哪里来

于 2012-11-16T15:15:54.480 回答
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 回答