2011-01-27 100 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 ...呃...我不敢相信這種方法是多麼的簡單和真棒 - 直到現在才知道它! :)

相關問題