Объект строителя тимьяна - PullRequest
1 голос
/ 16 февраля 2020

Насколько я понял, мне нужен объект для отправки форм с помощью Thymeleaf. Но что, если у меня есть объект, который должен быть создан с помощью внутреннего класса builder? Есть ли обходной путь для этого или мне нужно создать отдельный класс с теми же полями, что и у объекта-строителя?

Upd: Итак, шаблон, который я хочу использовать, это

<!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();
        }
    }
}


Я не Я установил методы в пользовательском классе, поэтому я не уверен, что тимилеф справится с этим.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...