我正在使用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