【问题标题】:Binding HTML form into Entity Spring MVC将 HTML 表单绑定到实体 Spring MVC
【发布时间】:2015-07-03 17:20:22
【问题描述】:

我有相当复杂的 JPA 实体。在我的页面上有一个表格,填写后创建实体。

但是实体包含很少的@Embedded 对象,它们的字段也需要填写。

让我们假设一个像这样的实体:

@Entity
public class User {
    @Embedded
    private Address address;
    @Embedded
    private PersonalData personalData;
}

和@Embeddable 对象:

public class Address {
    private String city;
    private String street;
    //and so on..
}

public class PersonalData {
    private String username;
    private String password;
    private String nameAndLastname;
    //and so on..
}

在这种情况下,是否可以将 HTML 页面中的表单直接绑定到该实体中?

我考虑过创建一些 DTO 对象,其中包含表单具有的所有必需字段,然后将该 UserDTO 转换为 User 实体对象。 但是我认为它会给我带来更多的复杂性和冗余代码。 (这不是反模式吗?)

我可以在控制器的方法中创建大量 @RequestParam 的列表,而不是 @ModelAttribute 绑定,但是代码变得很长而且不够优雅。

如何让它优雅地工作? 谢谢!

【问题讨论】:

    标签: spring jpa binding dto


    【解决方案1】:

    只需将您的对象添加到模型并使用嵌入路径填充表单

    model.addAttribute("user", new User());
    
    <form:form id="user" (...)>
        <form:input path="user.address.city" />
    (..)
    

    【讨论】:

    • 所以当进入注册页面时,页面应该有我的新用户()的模型,并且在提交表单后会被填充?可以在 Freemarker 中完成吗?我很确定是的
    • 我从来没有用 Freemaker 做过任何事情,顺便说一句,你为什么要使用 Freemaker 来处理 JSP 和 spring 表单?
    • 我认为 Freemarker 不会像 JSP 那样过时。 JSP 代码相当罗嗦.. 所以我声明要从我的控制器返回 .ftl 文件
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多