Spring MVC 3.2 Thymeleaf Ajax 片段 [英] Spring MVC 3.2 Thymeleaf Ajax Fragments
问题描述
我正在使用 Spring MVC 3.2 和 Thymeleaf 模板引擎构建应用程序.我是 Thymeleaf 的初学者.
我一切正常,包括 Thymeleaf,但我想知道是否有人知道关于如何对控制器执行简单的 Ajax 请求并仅呈现模板(片段)的一部分的简单而清晰的教程.
我的应用程序已配置所有内容(Spring 3.2、spring-security、thymeleaf 等)并且按预期工作.现在我想做 Ajax 请求(使用 jQuery 非常简单,但我不想使用它,因为 Thymeleaf 在其教程第 11 章:渲染模板片段(link) 提到它可以用片段来完成.
目前我的控制器中有
@RequestMapping("/dimensionMenuList")公共字符串 showDimensionMenuList(模型模型){合集<ArticleDimensionVO>物品尺寸;尝试 {articleDimensions = articleService.getArticleDimension(ArticleTypeVO.ARTICLE_TYPE);} catch (DataAccessException e) {//TODO: 返回错误抛出新的运行时异常();}model.addAttribute("dimensions", articleDimensions);返回/admin/index :: 维度菜单列表";}
我想替换<ul></ul>
菜单项的视图部分:
非常感谢任何线索.特别是如果我不必包含更多框架.对于 Java Web 应用程序来说,这已经太多了.
这是我在 博文:
我不想使用这些框架,因此在本节中,我使用 jQuery 向服务器发送 AJAX 请求,等待响应并部分更新视图(片段渲染).
表格
<!-- 结果块--><div id="resultsBlock">
</表单>
此表单包含将发送到服务器的带有搜索字符串 (searchSurname) 的输入文本.还有一个区域(resultsBlock div),它将使用从服务器收到的响应进行更新.
当用户点击按钮时,retrieveGuests() 函数将被调用.
function retrieveGuests() {var url = '/th-spring-integration/spring/guests';如果 ($('#searchSurname').val() != '') {url = url + '/' + $('#searchSurname').val();}$("#resultsBlock").load(url);}
jQuery 加载函数在指定的 url 向服务器发出请求,并将返回的 HTML 放入指定的元素(resultsBlock div)中.
如果用户输入搜索字符串,它将搜索具有指定姓氏的所有客人.否则,它将返回完整的客人名单.这两个请求会到达以下控制器请求映射:
@RequestMapping(value = "/guests/{surname}", method = RequestMethod.GET)public String showGuestList(Model model, @PathVariable("surname") String surname) {model.addAttribute("guests", hotelService.getGuestsList(surname));返回结果::结果列表";}@RequestMapping(value = "/guests", method = RequestMethod.GET)公共字符串 showGuestList(模型模型){model.addAttribute("guests", hotelService.getGuestsList());返回结果::结果列表";}
由于 Spring 与 Thymeleaf 集成,它现在可以返回 HTML 片段.在上面的示例中,返回字符串results :: resultsList"指的是位于结果页面中的名为 resultsList 的片段.我们来看看这个结果页面:
<html xmlns="http://www.w3.org/1999/xhtml"xmlns:th="http://www.thymeleaf.org" lang="en"><头>头部><身体><div th:fragment="resultsList" th:unless="${#lists.isEmpty(guests)}" id="results-block"><表格><头><tr><th th:text="#{results.guest.id}">Id</th><th th:text="#{results.guest.surname}">Surname</th><th th:text="#{results.guest.name}">姓名</th><th th:text="#{results.guest.country}">国家</th></tr></thead><tr th:each="guest : ${guests}"><td th:text="${guest.id}">id</td><td th:text="${guest.surname}">姓</td><td th:text="${guest.name}">name</td><td th:text="${guest.country}">国家</td></tr></tbody>