在ajax调用中返回ModelAndView之间的区别

时间:2014-01-09 10:51:21

标签: jquery ajax spring spring-mvc

为什么当我在调用ajax中返回一个ModelAndView时它会工作并正常显示jsp页面,但是当我将它返回到带有其他对象的地图时,它就不起作用。

第一个工作的案例:

@RequestMapping(value="/searchlostcard") 
public  @ResponseBody
ModelAndView searchlostcard() {             
    [...]   
return new ModelAndView("search/results","cardlist", listlostcard); ; 
}

我的ajax电话

[...]
success : function(responce) {              
    $('#page_grid').html(responce);
}

第二种情况不起作用:

@RequestMapping(value="/searchlostcard") 
public  @ResponseBody
Map<String, Object> searchlostcard() {          
    [...]   
    ModelAndView MaV = new ModelAndView("search/results","cardlist", listlostcard);

    Map<String, Object> modelino = new HashMap<String, Object>();

    modelino.put("taille", listlostcard.size());
    modelino.put("vue", MaV);

    return modelino ; 

}

我的ajax电话

[...]
success : function(responce) {          
     $('#page_grid').html(responce['vue']);
}

2 个答案:

答案 0 :(得分:3)

当您返回ModelAndView时,无论@ResponseBody注释如何,Spring MVC 都会呈现视图并返回呈现的视图。这是HTML(假设您的视图是HTML)返回给客户端。

当您返回Map并且具有@ResponseBody注释时,Spring会返回序列化对象(例如,表示地图的JSON字符串)。在这种情况下,不会呈现MaV变量引用的视图。也就是说,您没有将任何HTML返回给客户端。

答案 1 :(得分:0)

你显然不理解@ResponseBody的概念。它不会触发JSP(或其他视图技术),但会返回Object本身,呈现为JSON,XML或为其设置的任何内容协商。

您可以尝试删除注释,看看它是否有效。