首页 > 解决方案 > Thymeleaf 构建器对象

问题描述

据我了解,我需要一个对象才能使用 Thymeleaf 提交表单。但是,如果我有一个应该使用构建器内部类创建的对象呢?是否有解决方法,或者我是否必须创建一个与构建器对象具有相同字段的单独类?

更新:所以,我要使用的模板是这个

<!DOCTYPE HTML>
<html xmlns:th="https://www.thymeleaf.org">
<head>
    <title>Sign up form</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
<h1>Input user data</h1>
<!--/*@thymesVar id="user" type="com.university.domain.User"*/-->
<form action="#" th:action="@{/register}" th:object="${user}" method="post">
    <p>Id: <input type="text" th:field="*{id}" /></p>
    <p>E-mail: <input type="text" th:field="*{email}" /></p>
    <p>Password: <input type="text" th:field="*{password}" /></p>
    <p><input type="submit" value="Submit" /> <input type="reset" value="Reset" /></p>
</form>
</body>
</html>

而我要创建的用户就是这个

package com.university.domain;

import java.util.Objects;

public class User {
    protected final Integer id;
    protected final String email;
    protected final String password;
    protected final String firstName;
    protected final String lastName;
    protected final Role role;

    protected User(UserBuilder<? extends UserBuilder> userUserBuilder) {

        this.id = userUserBuilder.id;
        this.email = userUserBuilder.email;
        this.password = userUserBuilder.password;
        this.firstName = userUserBuilder.firstName;
        this.lastName = userUserBuilder.lastName;
        this.role = userUserBuilder.role;
    }

    public static UserBuilder<? extends UserBuilder> builder() {
        return new UserBuilder();
    }

    public Integer getId() {
        return id;
    }

    public String getFirstName() {
        return firstName;
    }

    public String getLastName() {
        return lastName;
    }

    public String getEmail() {
        return email;
    }

    public String getPassword() {
        return password;
    }

    public Role getRole() {
        return role;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) {
            return true;
        }
        if (o == null || getClass() != o.getClass()) {
            return false;
        }
        User user = (User) o;
        return Objects.equals(id, user.id) &&
                Objects.equals(firstName, user.firstName) &&
                Objects.equals(lastName, user.lastName);
    }

    @Override
    public int hashCode() {
        return Objects.hash(id, firstName, lastName);
    }

    public static class UserBuilder<SELF extends UserBuilder<SELF>> {

        protected Integer id;
        protected String email;
        protected String password;
        protected String firstName;
        protected String lastName;
        protected Role role;

        protected UserBuilder() {
        }

        @SuppressWarnings("unchecked")
        public SELF self() {
            return (SELF) this;
        }

        public User build() {
            return new User(self());
        }

        public SELF withId(Integer id) {
            this.id = id;
            return self();
        }

        public SELF withFirstName(String firstName) {
            this.firstName = firstName;
            return self();
        }

        public SELF withLastName(String lastName) {
            this.lastName = lastName;
            return self();
        }

        public SELF withEmail(String email) {
            this.email = email;
            return self();
        }

        public SELF withPassword(String password) {
            this.password = password;
            return self();
        }

        public SELF withRole(Role role) {
            this.role = role;
            return self();
        }
    }
}


我在用户类中没有设置方法,所以我不确定 thymeleaf 会处理它。

标签: javaspringspring-bootthymeleaf

解决方案


推荐阅读