我正在使用Spring MVC,需要对服务器进行异步调用并仅刷新页面的一部分。
我实际拥有的是返回字符串的控制器。 我使用JQuery(.post())函数调用控制器。
我的解决方案问题在于,我无法像使用ModelAndView作为返回类型时那样呈现JSP。
是否有任何方法可以返回已呈现的视图?
提前致谢。
Neuquino
我正在使用Spring MVC,需要对服务器进行异步调用并仅刷新页面的一部分。
我实际拥有的是返回字符串的控制器。 我使用JQuery(.post())函数调用控制器。
我的解决方案问题在于,我无法像使用ModelAndView作为返回类型时那样呈现JSP。
是否有任何方法可以返回已呈现的视图?
提前致谢。
Neuquino
我只是想确认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来构建巨大的集合...噫...我简直不敢相信这种方法有多么简单和棒——直到刚才我才意识到它!:)
您可以将此页面片段放入单独的JSP中,并从您的方法返回指向它的ModelAndView
。从那时起,AJAX调用和非AJAX调用没有区别。