当前位置: 首页 > 知识库问答 >
问题:

使用thymeleaf和springboot MVC访问多个bean

牧璞
2023-03-14

尝试使用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>

和result.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>

和bean类是: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 + "]";
       }

}

另一个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;
    }

}

现在,问题是,我需要这两个bean在GET和POST方法中都可以访问。当我运行代码时,它正在执行,但是bean没有值,所有值都是空的。请建议

共有1个答案

阳文轩
2023-03-14

在表单中找到1个对象将是最容易的。例如,创建一个新类PatientFormData,它包含来自2个对象的所有字段,并将控制器中的get和post方法中的对象转换为/转换为对象。

还请确保使用*{..}正确使用字段绑定:

<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>
 类似资料:
  • 我们的应用程序是一个中间层应用程序,它提供了十几个左右的前端应用程序,可以访问后端的几十个数据库(和其他数据源)。 我们决定使用OSGi将不相关的代码位分离到单独的包中。这确保了正确的代码封装,甚至允许特定捆绑包的热交换。 这样做的一个优点是,与特定数据库对话的任何代码都被隔离到单个捆绑包中。它还允许我们简单地为新的目的地插入新的捆绑包,并无缝地集成新代码。它还确保了如果单个后端数据源关闭,对其他

  • 问题内容: 我需要创建一个用户可配置的网络爬虫/爬虫,并且我正在考虑使用Scrapy。但是,我无法对域和允许的URL regex:es进行硬编码- 而是可以在GUI中对其进行配置。 如何(尽可能简单)使用Scrapy创建一个蜘蛛或一组蜘蛛,其中域和允许的URL regex:es是可动态配置的?例如,我将配置写入文件,然后蜘蛛程序以某种方式读取它。 问题答案: 警告:此答案适用于Scrapy v0.

  • 我怎么能访问变量我添加到模型中的Spring MVC内胸腺模板?我有以下控制器代码: 如何访问thymeleaf模板中的变量var1、var5、var6等?

  • 我试图创建一个Thymeleaf方言处理器,它执行ServletDispatcher.Include。我已经扩展了AbstractElementTagProcessor并重写了doProcess方法。相关的代码片段是:

  • 我有2个与firestore的firebase项目,让我们称他们为A和B,他们都有自己的web客户端。现在A web客户机需要读取B firestore数据库,所以我需要允许A客户机在B的某些集合下对firestore执行某些操作。是否有一种方法可以在使用firestore规则的同时使用B中A的身份验证数据来允许此类操作?。是否有一种方法可以将auth令牌从a链接到B中允许它们?。 任何机制都行得

  • 下面是我的情况:我有两个数据库:一个sybase和一个MSSQL。我希望在一个服务类中访问这两个数据库。例如,我想从sybase获得一些数据,然后我需要在MSSQL上做一些更新。 我已经根据网上找到的多个样本设置了两个数据源,但我无法访问我的第二个数据库(sybase)。 下面是我的代码: AIDCConfigDataSource 以下是我的错误: 如果我删除了FileUploadServiceI