Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用thymeleaf和springboot MVC访问多个bean_Java_Spring_Spring Boot_Thymeleaf - Fatal编程技术网

Java 使用thymeleaf和springboot MVC访问多个bean

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)

尝试使用SpringBoot MVC和thymeleaf在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";
}
以下是观点:

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我详细阐述了示例代码。