gpt4 book ai didi

ajax - Spring MVC 3.2 Thymeleaf Ajax 片段

转载 作者:IT老高 更新时间:2023-10-28 13:03:54 27 4
gpt4 key购买 nike

我正在使用 Spring MVC 3.2 和 Thymeleaf 模板引擎构建应用程序。我是 Thymeleaf 的初学者。

我一切正常,包括 Thymeleaf,但我想知道是否有人知道关于如何向 Controller 执行简单 Ajax 请求并仅渲染模板(片段)的一部分的简单而清晰的教程。

我的应用程序已配置好所有内容(Spring 3.2、spring-security、thymeleaf、...)并按预期工作。现在我想做 Ajax 请求(使用 jQuery 非常简单,但我不想使用,因为 Thymeleaf 在其教程第 11 章:渲染模板片段(link)中提到它可以用片段来完成。

目前我的 Controller 中有

@RequestMapping("/dimensionMenuList")
public String showDimensionMenuList(Model model) {

Collection<ArticleDimensionVO> articleDimensions;
try {
articleDimensions = articleService.getArticleDimension(ArticleTypeVO.ARTICLE_TYPE);
} catch (DataAccessException e) {
// TODO: return ERROR
throw new RuntimeException();
}

model.addAttribute("dimensions", articleDimensions);

return "/admin/index :: dimensionMenuList";
}

我想替换的 View 部分<ul></ul>菜单项:

<ul th:fragment="dimensionMenuList" class="dropdown-menu">
<li th:unless="${#lists.isEmpty(dimensions)}" th:each="dimension : ${dimensions}">
<a href="#" th:text="${dimension.dimension}"></a>
</li>
</ul>

非常感谢任何线索。特别是如果我不必包含更多框架。对于 java web 应用程序来说,它已经太多了。

最佳答案

这是我在 blog post 中遇到的一种方法:

我不想使用这些框架,所以在本节中我使用 jQuery 向服务器发送 AJAX 请求,等待响应并部分更新 View (片段渲染)。

表格

<form>
<span class="subtitle">Guest list form</span>
<div class="listBlock">
<div class="search-block">
<input type="text" id="searchSurname" name="searchSurname"/>
<br />
<label for="searchSurname" th:text="#{search.label}">Search label:</label>
<button id="searchButton" name="searchButton" onclick="retrieveGuests()" type="button"
th:text="#{search.button}">Search button</button>
</div>

<!-- Results block -->
<div id="resultsBlock">

</div>
</div>
</form>

此表单包含一个带有搜索字符串 (searchSurname) 的输入文本,该文本将被发送到服务器。还有一个区域(resultsBlock div)将使用从服务器收到的响应进行更新。

当用户点击按钮时,会调用retrieveGuests()函数。

function retrieveGuests() {
var url = '/th-spring-integration/spring/guests';

if ($('#searchSurname').val() != '') {
url = url + '/' + $('#searchSurname').val();
}

$("#resultsBlock").load(url);
}

jQuery load 函数向指定 url 的服务器发出请求,并将返回的 HTML 放入指定元素(resultsBlock div)中。

如果用户输入一个搜索字符串,它将搜索所有具有指定姓氏的客人。否则,它将返回完整的客人列表。这两个请求将到达以下 Controller 请求映射:

@RequestMapping(value = "/guests/{surname}", method = RequestMethod.GET)
public String showGuestList(Model model, @PathVariable("surname") String surname) {
model.addAttribute("guests", hotelService.getGuestsList(surname));

return "results :: resultsList";
}

@RequestMapping(value = "/guests", method = RequestMethod.GET)
public String showGuestList(Model model) {
model.addAttribute("guests", hotelService.getGuestsList());

return "results :: resultsList";
}

由于 Spring 与 Thymeleaf 集成,它现在可以返回 HTML 片段。在上面的示例中,返回字符串“results::resultsList”是指位于结果页面中名为 resultsList 的片段。我们来看看这个结果页面:

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:th="http://www.thymeleaf.org" lang="en">

<head>
</head>

<body>
<div th:fragment="resultsList" th:unless="${#lists.isEmpty(guests)}" id="results-block">
<table>
<thead>
<tr>
<th th:text="#{results.guest.id}">Id</th>
<th th:text="#{results.guest.surname}">Surname</th>
<th th:text="#{results.guest.name}">Name</th>
<th th:text="#{results.guest.country}">Country</th>
</tr>
</thead>
<tbody>
<tr th:each="guest : ${guests}">
<td th:text="${guest.id}">id</td>
<td th:text="${guest.surname}">surname</td>
<td th:text="${guest.name}">name</td>
<td th:text="${guest.country}">country</td>
</tr>
</tbody>
</table>
</div>
</body>
</html>

片段,它是一个注册客人的表格,将被插入结果 block 中。

关于ajax - Spring MVC 3.2 Thymeleaf Ajax 片段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20982683/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com