我有GET
请求的记录列表,该记录在UI上显示,带有一个复选框。
@GetMapping("/list")
public String list(Model model) {
model.addAttribute("records", createRecords());
return "list";
}
这是我的Record
POJO
:
class Record {
private boolean selected;
private Integer id;
private String name;
private String phone;
//....
我在UI中显示如下:
<th:block th:each = "record : ${records}">
<tr>
<td><input type="checkbox" th:field="*{selected}" th:checked="${record.selected}" /></td>
<td th:field="*{id}" th:text="${record.id}" />
<td th:field="${name}" th:text="${record.name}" />
<td th:field="${phone}" th:text="${record.phone}" />
</tr>
</th:block>
我很难从List
获取POST
上所选记录的UI
条。我只是从POST
获得了一个对象。
我想在POST
映射中找到类似的内容:
@PostMapping("/list")
public String select(@ModelAttribute ArrayList<Record> records) {
//... at least ids of selected records
//... or all the records back with selected
请帮忙。
答案 0 :(得分:2)
您的问题有很多可能的原因。下面列出的三个项目应该可以帮助您正确映射表单:
您应该正确构建表单,包括使用*
表示法来减少重复,例如:
<th:block th:each = "record : ${records}">
<tr>
<td><input type="checkbox" th:field="*{selected}"/></td>
<td><input type="text" th:field="*{id}"/></td>
<td><input type="text" th:field="*{name}"/></td>
<td><input type="text" th:field="*{phone}"/></td>
</tr>
</th:block>
在循环${records}
时,您可能需要使用双下划线表示法才能在表单中正确填充每个Record
。根据{{3}}:
..
__${...}__
语法是一个预处理表达式,它是在实际计算整个表达式之前计算的内部表达式。
仔细检查您是否正在Spring [{1}}中正确处理结果列表,方法是接受@Controller
注释List<Record>
或@ModelAttribute
。 (看起来你已经这样做了。)
参见例如this question。