我正在使用Spring MVC,並且需要對服務器進行異步調用並僅刷新頁面的一部分。如何使用Spring中的AJAX呈現視圖MVC
我真的有一個控制器返回一個字符串。我使用JQuery調用Controller(.post())函數。
我的解決方案的問題是,當我使用ModelAndView作爲返回類型時,我無法渲染JSP。
有什麼辦法可以返回已經呈現的View嗎?
在此先感謝。
Neuquino
我正在使用Spring MVC,並且需要對服務器進行異步調用並僅刷新頁面的一部分。如何使用Spring中的AJAX呈現視圖MVC
我真的有一個控制器返回一個字符串。我使用JQuery調用Controller(.post())函數。
我的解決方案的問題是,當我使用ModelAndView作爲返回類型時,我無法渲染JSP。
有什麼辦法可以返回已經呈現的View嗎?
在此先感謝。
Neuquino
你可以把這塊頁面到一個單獨的JSP,並返回一個ModelAndView
從你的方法指向它。從那時起,AJAX和非AJAX調用之間沒有區別。
此答案僅用於確認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 ...呃...我不敢相信這種方法是多麼的簡單和真棒 - 直到現在才知道它! :)
我與OP有相同的要求,這聽起來很有希望,但我不太遵循...可以詳細說明,還是鏈接到採用此方法的教程? – Bane 2012-03-21 14:05:14
我很笨。玩了一會後,它點擊了你想要的東西。 :)一旦我找到工作,我會在一分鐘內處理一個簡短的例子。 – Bane 2012-03-21 14:15:10