我正在使用 spring-mvc 和 thymeleaf 开发一个内部工具。
此工具的一部分用于创建我们保存在数据库中的实体。 这个实体非常复杂;它包含许多属性和关系。其中一些关系包含列表和其他属性。
我有两个约束:
- 单页。没有“向导”。
- 只在数据库中保存一个完成的对象。
现在,我并不是真的要问具体问题。我知道如何绕过 thymeleaf、spring @ModelAttribute 等。
我的问题主要是您选择哪种策略或如何处理非常复杂的对象创建。
现在我可以看到 3 种方法:
使用 thymeleaf 渲染页面。每次需要向列表中添加新元素时,我都会使用 Ajax 在服务器上添加新元素并重新呈现特定片段。因此,使用我的@ModelAttribute 来回与服务器进行交互,只在最后保存。
使用 thymeleaf 呈现基本页面。使用 JavaScript 创建 html 元素而不是提交给 @ModelAttribute,我将表单序列化为 JSON 并将此 JSON 提交给服务器。 (一种客户端模型)
使用 thymeleaf 呈现基本页面。当我需要添加列表项时,使用 JavaScript 动态创建 html 元素(确保我放置正确的 name=""以适合我的 Java 表单对象)并在最后提交整个内容。
我个人不确定是在 1 还是 2 之间。 我觉得使用 JSON 处理复杂对象比使用表单提交要容易得多。此外,带有子对象和属性的输入值/字段可能非常讨厌。有这种语法 对我来说听起来不太好......
3 可能可以工作,但根据我的拙见(第 7.4.1 节 - http://docs.spring.io/spring/docs/current/spring-framework-reference/html/validation.html),使用子属性完成 spring 数据绑定(bind)的方式缺少一些细节。
你怎么看?
最佳答案
我个人使用 Thymeleaf 自己的动态字段管理来确保干净地添加对象和对象的字段。
所以我会推荐选项 4:Thymeleaf 的动态字段管理。
阅读 http://www.thymeleaf.org/doc/tutorials/2.1/thymeleafspring.html#dynamic-fields .
我将其用于添加单个字段以及添加嵌套表单。不问任何问题的技巧。
希望对您有所帮助。
关于javascript - Spring mvc + Thymeleaf : dealing with complex form,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27768336/