我有一个springmvcweb应用,在前端使用thymeleaf。我可以将数据从控制器(作为属性添加到模型)发送到thymeleaf并在这里显示它们。现在我想把这些数据保存到数据库里。但我的问题是:如何将同一个对象从thymeleaf发送回控制器?
在这里,我将属性添加到控制器中的模型中:
@GetMapping("/find")
public String company(@RequestParam("companyId") String companyID, Model model) {
Company company = dataService.find(companyID);
model.addAttribute("company", company);
return "company-find";
}
在thymeleaf中,我可以毫无问题地访问公司名称(th:text=“${company.name}”)等公司信息。但我能多容易地把同一家公司交给管制员呢?尝试这个,但不起作用:
<form action="#" th:action="@{/companyadd}" method="POST" th:object="${company}">
<button type="submit" class="btn btn-info btn-sm ">Add company to database</button>
</form>
编辑
在我的控制器中,我有一个来自thymeleaf公司的Map。但在这个方法中,公司是空的:(
@PostMapping("/companyadd")
public String companyAdd(@ModelAttribute("company") Company company) {
dataService.add(company);
return "company-add";
}
编辑2
我需要用属性填充模型。我可以这样做,但如果属性不是字符串,我就有麻烦了。这个集合的两个属性是list,但我不知道如何将它们插入model:/。下面的代码可以工作(atributes是字符串),但我也需要在那里插入一个集合。
<form action="#" th:action="@{/addcompany}" method="POST" th:object="${company}">
<input type="hidden" th:field="*{name}">
<input type="hidden" th:field="*{address}">
<input type="hidden" th:field="*{capital}">
<button type="submit" class="btn btn-info btn-sm ">Add company to database</button>
</form>
3条答案
按热度按时间tktrz96b1#
在表单中,必须添加与目标公司对应的属性。
th:object="${company}"
只声明用于收集表单数据的模型对象。您可以在这里找到示例:https://spring.io/guides/gs/handling-form-submission/
7hiiyaii2#
对于只想复制到新对象的字段,可以使用隐藏字段。例如:
然后“company.id”将从get处理程序中发送的company对象复制到post处理程序中接收的company对象。这些信息应该足够保存更改或查找其余字段。
但要注意:任何用户都可以通过编辑html轻松地更改隐藏字段中的内容。因此,不要仅仅因为信息来自一个隐藏的字段就认为它是正确的或可信的。在本例中,您应该仔细检查以确保用户在保存之前确实可以访问该id。
nnsrf1az3#
您可以向控制器添加post端点,如下所示: