2010-10-30 48 views
6

我对Spring MVC相当陌生,并试图弄清楚如何在不刷新整个页面的情况下呈现局部视图。我以为在Spring MVC中呈现部分JSP片段?

  • ,如果我可以张贴到后端的请求,在这种情况下,一个Spring控制器方法

  • 如果这种方法在模型属性罢了,然后返回与ModelAndView对象指定的视图名称映射到JSP文件,并且JSP能够生成必要的HTML片段。

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

这可能不会奏效,但我不确定它有什么问题吗?我尽可能地调用了JSP来呈现视图,但由于某种原因,我在会话中放置的模型似乎并不存在。

如果有相似经历的人可以提供关于此主题的一些示例,或者指出可能出错的地方,我将不胜感激。

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

在此先感谢。

奥利弗

+0

从你的控制器提供一些代码。 – heikkim 2010-11-26 09:34:12

回答

-1

当你以为你需要Ajax获得新的HTML内容,并在当前的HTML页面插入。要加载它的这个内容,你可以使用jQuery库,特别是它的功能load()。在这个链接中有它的使用的例子。

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

8

我不会说我的回答下面一定回答你的问题,但我通过谷歌在此网页,而我试图复制春AjaxEventDecoration(只加载一个页面的片段),所以这里是我现在发现,以防万一有人到达这里:

快速的答案是确保您将XMLHttpRequest的'接受'属性设置为'text/html; type = ajax',然后告诉Spring MVC只有(逗号应该返回由URL参数'fragments'指定的片段。

我使用Tiles服务器端和jQuery客户端,这是我设置的粗略概述:

一个例子webmvc-配置。XML

... 
<bean id="tilesViewResolver" class="org.springframework.js.ajax.AjaxUrlBasedViewResolver"> 
    <property name="viewClass" value="org.springframework.js.ajax.tiles2.AjaxTilesView" /> 
</bean> 
... 

一个例子页的瓷砖配置

<!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> 

我有一个返回的被映射到该请求 '赛事页面'(ModelMap实例的Java的控制器类.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) 
    { 
     ... 
    } 
} 

然后我的JavaScript客户端代码(即用于例子的缘故总是加载“objectViewer”片段):

注:您的HTML元素加载的片段必须有一个ID属性匹配片段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); 
     } 
    }); 
} 

详情请参阅Handling Ajax Requests

希望有所帮助。

0

加成埃德的答案: 添加以下到我的layouts.xml,其配置布局

<tiles-definitions> 
.... 

    <definition name="partial" template="/WEB-INF/layouts/partial.jspx"> 
    </definition> 
.... 
</tiles-definitions> 

partial.jspx是局部视图

<div xmlns:jsp="http://java.sun.com/JSP/Page" xmlns:tiles="http://tiles.apache.org/tags-tiles"> 
    <jsp:directive.page contentType="text/html;charset=UTF-8"/> 
    <jsp:directive.page pageEncoding="UTF-8"/> 
    <jsp:output omit-xml-declaration="yes"/> 
    <tiles:insertAttribute name="partialView"/> 
</div> 

配置:

<tiles-definitions> 
    <definition extends="partial" name="partial/listOfProcessesPartial"> 
     <put-attribute name="partialView" value="/WEB-INF/views/partial/listOfProcessesPartial.jspx"/> 
    </definition> 

然后你只是从你的控制器返回一些视图,并得到唯一的HTML片段作为回应

相关问题