Как визуализировать виды плиток в Spring MVC с помощью AJAX?


Я использую Spring 3 MVC для создания веб-приложения, которое имеет общий макет и" контент " div, который часто меняется / обновляется. Разметка контента находится в своей собственной плитке, и я хочу иметь возможность обновить эту плитку с помощью AJAX, не обновляя всю страницу. Я знаю, как запустить AJAX-запрос от клиента и обработать его в контроллере. Меня больше всего смущает конфигурация Spring (какие виды, решатели видов и т. д.). У кого-нибудь есть пример?

1 4

1 ответ:

В принципе, вы можете создать представление tiles, которое содержит только то содержимое, которое вы хотите, без HTML-скелета вокруг и визуализировать это представление/плитку в контроллере, который обрабатывает запрос ajax.

Предположим, у вас есть страница foo.JSP-страница. При вызове http://example.com/myapp/foo, целая html-страница с foo.jsp как содержание тела должно быть представлено. При вызове http://example.com/myapp/ajax/foo, только foo.jsp должен быть отправлен без всего скелета HTML, так что клиент может загрузить его через ajax и заменить часть в страница.

В итоге вы получите два определения вида, одно из которых включает foo.jsp в целой странице и один, который содержит только foo.сама ССП. приложение-макет.jsp будет содержать весь скелет HTML с атрибутом" body".

<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";
   }
}