4

我正在使用 Spring 3 MVC 构建一个具有通用布局和经常更改/刷新的“内容”div 的 Web 应用程序。内容标记在它自己的磁贴中,我希望能够通过 AJAX 刷新该磁贴而不刷新整个页面。我知道如何从客户端触发 AJAX 请求并在控制器中处理它。我主要对 Spring 配置(哪些视图、视图解析器等)感到困惑。有人有例子吗?

4

1 回答 1

7

基本上,您可以创建一个仅包含您想要的内容而不包含 HTML 骨架的图块视图,并在处理 ajax 请求的控制器中呈现此视图/图块。

假设您有一个页面 foo.jsp。调用时http://example.com/myapp/foo,应该呈现以 foo.jsp 作为正文内容的整个 html 页面。调用时http://example.com/myapp/ajax/foo,只发送 foo.jsp 而不发送整个 HTML 框架,以便客户端可以通过 ajax 加载并替换页面中的一部分。

您最终将得到两个视图定义,一个将 foo.jsp 嵌入整个页面,另一个仅包含 foo.jsp 本身。app-layout.jsp 将包含带有“body”属性的整个 HTML 框架。

<definition name="foo" template="/WEB-INF/layouts/app-layout.jspx">
    <put-attribute name="body">
        <definition template="/WEB-INF/views/foo.jsp">
            <put-attribute name="message" value="hello"/>
        </definition>
    </put-attribute>
</definition>

<definition name="ajax.foo" template="/WEB-INF/views/foo.jsp">
    <put-attribute name="message" value="hello"/>
</definition>

处理 URL 的控制器/ajax/foo将返回视图“ajax.foo”,处理 URL 的控制器/foo将返回视图“foo”。

@Controller
@RequestMapping("/ajax")
public void class AjaxController {
   @RequestMapping("/foo")
   public String foo() {
       return "ajax.foo";
   }
}

@Controller
@RequestMapping("/")
public void class AppController {
   @RequestMapping("/foo")
   public String foo() {
       return "foo";
   }
}
于 2012-08-31T07:50:16.837 回答