在 Thymeleaf 和 spring MVC 中提交表单上发布对象列表

问题描述 投票:0回答:1

我在后端有一个名为 PatientDto 的类。

@Data
@AllArgsConstructor
@NoArgsConstructor
public class PatientDto {
    private String nationalId;
    private String firstName;
    private String lastName;
    private List<Phone> phones;
}

还有一个名为 Phone 的类:

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Phone {
    private String phoneNumber;
}

假设我的 html Thymeleaf 中有两个输入元素,用于从用户那里获取两个电话号码:

<form th:method="post" th:action="@{/reception/savePatient}" th:object="${patientDto}" >
 <input type="text" th:field="*{nationalId}" id="nationalId">
 <input type="text" th:field="*{firstName}" id="firstName">
 <input type="text" th:field="*{lastName}" id="lastName">
 <input type="text" id="phoneNumber1">
 <input type="text" id="phoneNumber2">
 <button type="submit" class="btn btn-primary" id="savePatientBtn">Save</button>
</form>

控制器:

 @GetMapping
    public String getReceptionView(Model model){
        PatientDto patientDto = new PatientDto();
        model.addAttribute("patientDto", patientDto);
        return "reception";
    }

    @PostMapping("/reception/savePatient")
    public String savePatient(@ModelAttribute("patientDto") PatientDto patientDto){
        System.out.println("???????????? reception>>> " + patientDto.toString());
        return "reception";
    }

如何将这两个电话号码作为电话列表发布,作为表单提交时 PatientDto 对象的一部分? 这两个电话号码的“th:field”值是多少?

我感谢你的帮助

spring-mvc thymeleaf spring-thymeleaf
1个回答
0
投票

它应该看起来像这样:

<input type="text" th:field="*{phones[0].phoneNumber}">
<input type="text" th:field="*{phones[1].phoneNumber}">

(其中

phoneNumber
Phone
对象上的正确字段名称。)

如果您的

phones
列表中已有元素,则可以使用循环,但必须对
th:field
属性使用预处理。像这样:

<input th:each="phone, i: *{phones}" type="text" th:field="*{phones[__${i.index}__].phoneNumber}" />
© www.soinside.com 2019 - 2024. All rights reserved.