【问题标题】:Difference between returning ModelAndView in ajax call在 ajax 调用中返回 ModelAndView 的区别
【发布时间】:2014-01-09 10:51:21
【问题描述】:

为什么当我在调用 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']);
}

【问题讨论】:

  • 为什么要将 ModelAndView 放入模型图中?客户端应该如何处理 ModelAndView 对象?
  • 我没有放入模型地图,我把它放在地图中以发送其他带有视图的对象。

标签: jquery ajax spring spring-mvc


【解决方案1】:

当您返回 ModelAndView 时,Spring MVC 渲染视图并返回该渲染视图,而不管 @ResponseBody 注释。即返回给客户端的 HTML(前提是您的视图是 HTML)。

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 是的,我知道如果我删除注释并返回一个 ModelAndView 对象,它将工作并向我显示 jsp 页面,但正如你所说,它返回一个 json 或 xml 对象,所以 ModelAndView 是一个对象,它将以 json 对象的形式返回,那么为什么我的主题工作中的第一个案例和第二个案例没有?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-09-14
    • 2014-04-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多