java - 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 会处理它。
解决方案
推荐阅读
- php - 通过同一张表中的两列从数据库中选择一列
- javascript - 类型转换显示省略前导 0
- php - 使用向后兼容脚本将旧 php 脚本与新版本接口
- android - 可滚动的 PagerAdapter
- ruby-on-rails - 如何在rails中将字符串(包含偏移量)转换为日期/时间
- c# - 使用 .Select() 创建新对象时的操作顺序
- javafx - 如何在选中/取消选中复选框时显示和隐藏图像?
- jquery - 如何基于MVC JsonResult在页面加载时动态设置默认的boostrap选项卡
- ruby-on-rails - Rails - 为“/admin”添加自定义路由约束
- java - 无法从 JavaTable 获取单元格数据