2011-01-27 105 views
24

我正在使用Spring MVC,并且需要对服务器进行异步调用并仅刷新页面的一部分。如何使用Spring中的AJAX呈现视图MVC

我真的有一个控制器返回一个字符串。我使用JQuery调用Controller(.post())函数。

我的解决方案的问题是,当我使用ModelAndView作为返回类型时,我无法渲染JSP。

有什么办法可以返回已经呈现的View吗?

在此先感谢。

Neuquino

回答

15

你可以把这块页面到一个单独的JSP,并返回一个ModelAndView从你的方法指向它。从那时起,AJAX和非AJAX调用之间没有区别。

+0

我与OP有相同的要求,这听起来很有希望,但我不太遵循...可以详细说明,还是链接到采用此方法的教程? – Bane 2012-03-21 14:05:14

+0

我很笨。玩了一会后,它点击了你想要的东西。 :)一旦我找到工作,我会在一分钟内处理一个简短的例子。 – Bane 2012-03-21 14:15:10

51

此答案仅用于确认axtavt的答案。我花了一分钟才知道他在暗示什么,所以我想我会发布一段代码片段来帮助任何在我后面的人。不过,荣誉归功于他! :)


MyController.java

@Controller 
public class MyController { 

    @RequestMapping(method=RequestMethod.GET, value="/mainView") 
    public ModelAndView getMainView(...) {   
     /* do all your normal stuff here to build your primary NON-ajax view 
     * in the same way you always do 
     */    
    } 

    /* this is the conroller's part of the magic; I'm just using a simple GET but you 
    * could just as easily do a POST here, obviously 
    */ 
    @RequestMapping(method=RequestMethod.GET, value="/subView") 
    public ModelAndView getSubView(Model model) { 
     model.addAttribute("user", "Joe Dirt"); 
     model.addAttribute("time", new Date()); 
     return new ModelAndView("subView"); 
    } 

} 


mainView.jsp

(...) 

<script src="http://code.jquery.com/jquery-1.7.1.min.js"></script> 
<script type="text/javascript"> 
    function doAjaxPost() { 

     $.ajax({ 
      type: "GET", 
      url: "subView", 
      success: function(response) { 
       $("#subViewDiv").html(response); 
      } 
     }); 
    } 
</script> 
<input type="button" value="GO!" onclick="doAjaxPost();" /> 
<div id="subViewDiv"></div> 

(...) 


subView.jsp

(...) 

<h3> 
    User Access Details 
</h3> 

<p> 
    ${user} accessed the system on ${time} 
</p> 

(...) 


就是这样!美的东西;到目前为止,在Spring中做AJAX一直是一个巨大的痛苦......解析大@ ResponseBody的,通过连接JS中的东西构建大量的HTML ...呃...我不敢相信这种方法是多么的简单和真棒 - 直到现在才知道它! :)

相关问题