Java 使用thymeleaf和springboot MVC访问多个bean
尝试使用SpringBoot MVC和thymeleaf在POST方法中访问多个对象 这是控制器Java 使用thymeleaf和springboot MVC访问多个bean,java,spring,spring-boot,thymeleaf,Java,Spring,Spring Boot,Thymeleaf,尝试使用SpringBoot MVC和thymeleaf在POST方法中访问多个对象 这是控制器 @Controller public class PatientController { ObjectMapper Obj = new ObjectMapper(); @GetMapping("/patient") public static String patientForm(Model model)
@Controller
public class PatientController {
ObjectMapper Obj = new ObjectMapper();
@GetMapping("/patient")
public static String patientForm(Model model) {
model.addAttribute("patient", new PatientDataModel());
model.addAttribute("patient1", new PatientDataModel1());
return "patient";
}
@RequestMapping(value="/patient", method=RequestMethod.POST, params="action=Send data to MongoDB cluster")
public static String patientSubmit(@ModelAttribute("patient") PatientDataModel patient, @ModelAttribute("patient1") PatientDataModel patient1, Model model, Object obj ) throws JsonProcessingException {
model.addAttribute("patient", patient);
model.addAttribute("patient1", patient1);
return "result";
}
以下是观点:
patient.html
<form action="#" th:action="@{/patient}" th:object="${patient}" method="post">
<div th:object="${patient1}" >
<p>Patient Id: <input type="text" th:value="${patient.id}" /></p>
<p>Patient Name: <input type="text" th:value="${patient.name}" /></p>
<p>Message: <input type="text" th:value="${patient.content}" /></p>
<p>address: <input type="text" th:value="${patient1.address}" /></p>
</div>
<p><input type="submit" name="action" value="Send data to MongoDB cluster" />
<input type="reset" value="Reset" /></p>
</form>
</div>
<div class="starter-template">
<h1>Result</h1>
<p th:text="'id: ' + ${patient.id}" />
<p th:text="'Name: ' + ${patient.name}" />
<p th:text="'content: ' + ${patient.content}" />
<p th:text="'address: ' + ${patient1.address}" />
<a href="/patient">Submit another message</a>
</div>
另一个bean:
public class PatientDataModel1 {
private String address;
@Override
public String toString() {
return "Patient1 [address=" + address + "]";
}
public PatientDataModel1()
{
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
}
现在,问题是,我需要在GET和POST方法中访问这两个bean。
当我运行代码时,它正在执行,但bean没有值,所有值都为null。请建议在表单中最容易找到一个对象。例如,创建一个新类
PatientFormData
,该类包含两个对象中的所有字段,并将其与控制器中get和post方法中的对象进行转换
@Controller
public class PatientController {
ObjectMapper Obj = new ObjectMapper();
@GetMapping("/patient")
public static String patientForm(Model model) {
model.addAttribute("patient", new PatientDataModel());
model.addAttribute("patient1", new PatientDataModel1());
return "patient";
}
@RequestMapping(value="/patient", method=RequestMethod.POST, params="action=Send data to MongoDB cluster")
public static String patientSubmit(@ModelAttribute("patient") PatientDataModel patient, @ModelAttribute("patient1") PatientDataModel patient1, Model model, Object obj ) throws JsonProcessingException {
model.addAttribute("patient", patient);
model.addAttribute("patient1", patient1);
return "result";
}
例如:
public class PatientFormData {
private long id;
private String content;
private String name;
private String address;
public static PatientFormData from(PatientDataModel model,
PatientDataModel1 model1) {
id = model.getId();
content = model.getContent();
name = model.getName();
address = model.getAddress();
}
public PatientDataModel createPatientDataModel() {
PatientDataModel result = new PatientDataModel();
result.setId(id);
result.setContent(content);
result.setName(name);
return result;
}
// getters and setters here
}
在控制器中使用此选项:
@Controller
public class PatientController {
ObjectMapper Obj = new ObjectMapper();
@GetMapping("/patient")
public static String patientForm(Model model) {
PatientFormData formData = PatientFormData.from(new PatientDataModel(), new PatientDataModel1());
model.addAttribute("patientFormData", formData);
return "patient";
}
@RequestMapping(value="/patient", method=RequestMethod.POST, params="action=Send data to MongoDB cluster")
public static String patientSubmit(@ModelAttribute("patientFormData") PatientFormData formData, Model model, Object obj ) throws JsonProcessingException {
PatientDataModel model = formData.createPatientDataModel();
PatientDataModel1 model1 = formData.createPatientDataModel1();
// Do more processing with objects
return "result";
}
另外,请确保使用*{..}
正确使用字段绑定:
<form action="#" th:action="@{/patient}" th:object="${patientFormData}" method="post">
<p>Patient Id: <input type="text" th:value="*{id}" /></p>
<p>Patient Name: <input type="text" th:value="*{name}" /></p>
<p>Message: <input type="text" th:value="*{content}" /></p>
<p>address: <input type="text" th:value="*{address}" /></p>
</div>
<p><input type="submit" name="action" value="Send data to MongoDB cluster" />
<input type="reset" value="Reset" /></p>
</form>
</div>
病人编号:
病人姓名:
信息:
地址:
谢谢。但这是我已经拥有的。我特别需要两个bean/对象,以便可以利用它们进行进一步处理。请建议“进一步处理”是什么意思?您可以在控制器中从PatientFormData
->转换2个对象,反之亦然。还是有什么东西可以阻止这种情况发生?我如何将PatientFormData转换为两个对象?有什么例子吗?如果可能的话,您可以修改控制器吗?我的意思是,进一步处理是,需要将这两个对象发送到mongodb集合,以便我可以创建documents@user2315104我详细阐述了示例代码。