我使用以下命令刷新表的内容:
<tr id="rows" th:each="entity: ${entities}">
<!-- ... -->
</tr>
在服务器端:
@RequestMapping(value = "/replace", method = RequestMethod.GET)
public String replace(Model model) {
model.addAttribute("entities", entities);
return "/ :: #rows";
}
使用以下方法调用方法:
$.get('/replace', function(fragment) {
// fragment gives me all rows of the table
}
可正常使用。但是,我不想每次都更新所有行,而只更新一行,所以我的想法是使用动态id
,如下所示:
<tr th:id="'row' + ${entity.id}" th:each="entity, iterStat: ${entities}">
<!-- ... -->
</tr>
在服务器端:
@RequestMapping(value = "/replace", method = RequestMethod.GET)
public String replace(@RequestParam("id") int id, Model model) {
model.addAttribute("entities", entities);
return "/ :: #row" + id;
}
使用以下方法调用方法:
$.get('/replace', {id: id} function(fragment) {
// fragment is empty
}
但这不起作用。看一下html代码和服务器端,id
是正确的。不能使用th:id
吗?如果我只想更新表中的一行而不是所有行,那将是一种解决方法?谢谢。
我也尝试过使用th:fragment
进行相同操作-在没有${entity.id}
的情况下也可以使用。
答案 0 :(得分:0)
使用th:fragment
应该可以解决问题。我通常使用它们来完成您想要做的事情。这是一个实现方法的示例。
<html lang="en" xmlns:th="http://www.thymeleaf.org" xmlns="http://www.w3.org/1999/xhtml">
<head></head>
<body>
<th:block th:fragment="entity-row">
<tr th:id="'row'+${entity.id}">
<td th:text=${entity.id}></td>
<!-- Whatever other element you need. -->
</tr>
</th:block>
</body>
将上面的代码整个添加到一个新的html文件中。记住,我们期望一个单一的实体,所以我们不需要每个。现在,为了获取片段,您需要在Controller中执行以下操作。
@RequestMapping(value = "/replace/fragment", method = RequestMethod.GET)
@ResponseBody
public String replaceSingleRow(@RequestParam("id") int id, Model model) {
Entity entity = entityService.findById(id);
model.addAttribute("entity", entity);
return "file :: entity-row";
}
文件将是包含片段的html文件的名称。当然,我假设您只是将所需的ID传递给我们的控制器。
答案 1 :(得分:0)
我只能通过以下方式向视图发送一个实体:
Entity entity = entityService.findById(id);
model.addAttribute("entities", entity);
这当然不是最漂亮的方法,但是可以达到预期的效果。
答案 2 :(得分:0)
反应很晚,但是我认为这是最终的解决方案。
胸腺片段
<tr th:fragment="entity-row" th:id="'row' + ${entity.id}" th:each="entity, iterStat: ${entities}">
<!-- ... -->
</tr>
控制器代码
@RequestMapping(value = "/replace", method = RequestMethod.GET)
public String replace(@RequestParam("id") int id, Model model) {
Entity entity = entityService.findById(id);
model.addAttribute("entities", Arrays.asList(entity)); // sending the row as list, so that the loop can iterate and will produce a single row
return "file :: entity-row";
}
ajax响应中具有所需的单行html,现在您可以替换现有的行
$.get('/replace', {id: id} function(fragment) {
$("#row" + id).replaceWith(fragment);
}