【发布时间】:2011-06-16 12:13:36
【问题描述】:
我正在使用 Spring MVC,我需要对服务器进行异步调用并只刷新页面的一部分。
我实际上拥有的是一个返回字符串的控制器。我使用 JQuery (.post()) 函数调用控制器。
我的解决方案的问题是我无法像使用 ModelAndView 作为返回类型时那样呈现 JSP。
有没有办法返回已经渲染的视图?
提前致谢。
纽基诺
【问题讨论】:
标签: jquery ajax spring-mvc
我正在使用 Spring MVC,我需要对服务器进行异步调用并只刷新页面的一部分。
我实际上拥有的是一个返回字符串的控制器。我使用 JQuery (.post()) 函数调用控制器。
我的解决方案的问题是我无法像使用 ModelAndView 作为返回类型时那样呈现 JSP。
有没有办法返回已经渲染的视图?
提前致谢。
纽基诺
【问题讨论】:
标签: jquery ajax spring-mvc
这个答案只是为了确认 axtavt 的答案有效。我花了一分钟才意识到他的建议,所以我想我会发布一个 code-sn-p 来帮助任何跟在我后面的人。不过,要向他致敬! :)
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……呃……我不敢相信这种方法是多么简单和真棒——直到现在才意识到! :)
【讨论】:
您可以将这段页面放入一个单独的 JSP 中,并从您的方法中返回一个指向它的 ModelAndView。从那时起,AJAX 和非 AJAX 调用之间没有区别。
【讨论】: