Oli*_*ver 6 ajax spring spring-mvc
我是Spring MVC的新手,并试图弄清楚如何渲染局部视图而不刷新整个页面.我想:
如果我可以向后端发布请求,在本例中是一个Spring控制器方法
如果此方法填充模型属性,然后返回具有指定视图名称映射到JSP文件的ModelAndView对象,并且JSP能够生成必要的HTML片段.
返回的HTML片段将插入到DIV占位符中.
这可能不起作用,但我不确定它有什么问题?我调用了JSP来渲染视图,但由于某种原因,我放入会话的模型属性似乎并不存在.
如果有相似经验的人可以就这个问题提供一些例子,或者指出我可能出错的地方,我会很感激.
我从Spring Web流程中读取一些东西来处理带有碎片视图的Ajax请求,但我不确定我是否知道它是如何工作的.
我不会说下面的答案必然会回答你的问题,但是当我试图复制Spring AjaxEventDecoration(只加载页面的片段)时,我通过Google到达了这个页面,所以这就是我现在发现的情况有人来过这里:
快速回答是确保将XMLHttpRequest的'Accept'属性设置为'text/html; type = ajax',然后告诉Spring MVC应该返回由URL参数'fragments'指定的(逗号分隔的)片段.
我正在使用Tiles服务器端和jQuery客户端,这是我的设置的粗略概述:
webmvc-config.xml示例
...
<bean id="tilesViewResolver" class="org.springframework.js.ajax.AjaxUrlBasedViewResolver">
<property name="viewClass" value="org.springframework.js.ajax.tiles2.AjaxTilesView" />
</bean>
...
Run Code Online (Sandbox Code Playgroud)
示例页面的Tiles配置
<!DOCTYPE tiles-definitions PUBLIC
"-//Apache Software Foundation//DTD Tiles Configuration 2.0//EN"
"http://tiles.apache.org/dtds/tiles-config_2_0.dtd">
<tiles-definitions>
<definition name="eventPage" extends="twoColumnLayout">
<put-attribute name="title" value="My Event Page" />
<put-attribute name="view" value="/WEB-INF/jsp/viewText.jsp" />
<put-attribute name="objectViewer" value="/WEB-INF/jsp/viewEvent.jsp" />
</definition>
</tiles-definitions>
Run Code Online (Sandbox Code Playgroud)
我有一个Java控制器类,它返回一个ModelMap实例,该实例映射到请求'eventPage'(在我的例子中是.html).:
@Controller
public class EventPageController
{
/**
* Method to handle main my events page.
*/
@RequestMapping(value = "/eventPage.html", method = RequestMethod.GET)
public ModelMap pageDisplayHandlerForEvents(ModelMap model, HttpServletRequest req)
{
...
}
}
Run Code Online (Sandbox Code Playgroud)
然后我的JavaScript客户端代码(例如,总是加载'objectViewer'片段):
注意:作为片段加载的HTML元素必须具有与片段ID匹配的ID属性.
$(".springFragmentLoader").click(function()
{
$.ajax(__contextRoot + "/eventPage.html?fragments=objectViewer", {
beforeSend: function(req) {
req.setRequestHeader("Accept", "text/html;type=ajax");
},
complete : function(jqXHR)
{
$("#objectViewer").html(jqXHR.responseText);
}
});
}
Run Code Online (Sandbox Code Playgroud)
有关更多详细信息,请参阅处理Ajax请求.
希望有所帮助.