在Spring MVC中渲染部分JSP片段?

Oli*_*ver 6 ajax spring spring-mvc

我是Spring MVC的新手,并试图弄清楚如何渲染局部视图而不刷新整个页面.我:

  • 如果我可以向后端发布请求,在本例中是一个Spring控制器方法

  • 如果此方法填充模型属性,然后返回具有指定视图名称映射到JSP文件的ModelAndView对象,并且JSP能够生成必要的HTML片段.

  • 返回的HTML片段将插入到DIV占位符中.

这可能不起作用,但我不确定它有什么问题?我调用了JSP来渲染视图,但由于某种原因,我放入会话的模型属性似乎并不存在.

如果有相似经验的人可以就这个问题提供一些例子,或者指出我可能出错的地方,我会很感激.

我从Spring Web流程中读取一些东西来处理带有碎片视图的Ajax请求,但我不确定我是否知道它是如何工作的.

Ed *_*d . 8

我不会说下面的答案必然会回答你的问题,但是当我试图复制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请求.

希望有所帮助.


Jav*_*avi -1

正如您所认为的,您需要 Ajax 来获取新的 HTML 内容并将其插入到当前的 HTML 页面中。要加载此内容,您可以使用 jquery 库,特别是它的函数load()。在此链接中有其使用示例。

您还需要一个像您所做的那样从 JSP 返回 HTML 代码的控制器方法。该方法必须使用应在 ajax 的 load() 函数中使用的 url 进行映射。如果您在使用 Spring 对 JSP 中的属性进行趋势分析时遇到问题,请在问题中添加一些代码以查看可能出现的问题。