簡體   English   中英

使用 thymeleaf 和 springboot MVC 訪問多個 bean

[英]Access Multiple beans using thymeleaf and springboot MVC

嘗試使用 SpringBoot MVC 和 thymeleaf 在 POST 方法中訪問多個對象。

這是 controller。

@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";
}

以下是意見:

患者.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>

結果。html

  <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>

豆類是: PatientDataModel.java

  public class PatientDataModel {
    
    private long id;
    private String content;
    private String name;
    
    
    public PatientDataModel()
    {
        
    }
    
    
    
    public PatientDataModel(long id, String content, String name)
    {
        this.id = id;
        this.content = content;
        this.name = name;
    }
    

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public long getId() {
        return id;
    }

    public void setId(long id) {
        this.id = id;
    }

    public String getContent() {
        return content;
    }

    public void setContent(String content) {
        this.content = content;
    }
    
       @Override
       public String toString()
       {
          return "Patient [id=" + id + ", firstName=" + name + ", " +
                "content=" + content + "]";
       }

}

另一個豆子:

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;
    }

}

現在,問題是,我需要兩個 bean 都可以在 GET 和 POST 方法中訪問。 當我運行代碼時,它正在執行但bean沒有值,都是null。 請建議

最容易找到表格中的 1 個 object。 例如,創建一個新的 class PatientFormData ,其中包含來自 2 個對象的所有字段,並在 controller 中的 get 和 post 方法中轉換/轉換為對象。

例如:

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 中使用它:

@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>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM