如何使用ThymeLeaf将实体分配给表单中的另一个实体?

时间:2018-11-23 14:23:01

标签: spring spring-mvc spring-boot spring-data-jpa thymeleaf

我正在研究MVC Java项目,并且正在将Spring Boot与ThymeLeaf一起使用。我的问题是,在创建任务时,我想选择并保存将分配给任务的用户。我设法正确地进行了选择,但是无法保存所选的用户。始终会在未分配用户的情况下保存。

这是我的Task实体类:

@Entity
public class Task extends BaseEntity {

    private String name;

    private String description;

    private Date dateOfCreation;

    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private Date dueDate;

    @ManyToOne
    private User assignee;

    public Task() {
        this.dateOfCreation = new Date(System.currentTimeMillis());
    }
}

我的用户实体如下:

@Entity
public class User extends BaseEntity {

    private String username;

    private String password;

    @OneToMany(mappedBy = "assignee")
    private List<Task> assignedTasks;
}

BaseEntity所在的位置

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer id;

@Version
private Integer version;

负责我的taskform.html的控制器功能是:

@RequestMapping("/new")
public String newTask(Model model){
    model.addAttribute("task", new Task());
    model.addAttribute("users", userService.getAllUsers());
    return "task/taskform";
}

我的taskform.html看起来像这样:

<form class="form-horizontal" th:object="${task}" th:action="@{/task}" method="post">
    <input type="hidden" th:field="*{id}"/>
    <input type="hidden" th:field="*{version}"/>
    <div class="form-group">
        <label class="col-sm-2 control-label">Name:</label>
        <div class="col-sm-10">
            <input type="text" class="form-control" th:field="*{name}"/>
        </div>
    </div>

    <div class="form-group">
        <label class="col-sm-2 control-label">Description:</label>
        <div class="col-sm-10">
            <input type="text" class="form-control" th:field="*{description}"/>
        </div>
    </div>

    <div class="form-group">
        <label class="col-sm-2 control-label">Description:</label>
        <div class="col-sm-10">
            <input type="date" th:value="*{dueDate}" th:field="*{dueDate}" id="dueDate" />
        </div>
    </div>

    <div class="form-group">
        <label class="col-sm-2 control-label">Select user:</label>
        <div class="col-sm-10">
            <select class="form-control">
                <option th:field="*{assignee}" th:each="assignee : ${users}" th:value="${assignee}" th:text="${assignee.username}">
                </option>
            </select>
         </div>
    </div>

    <div class="row">
        <button type="submit" class="btn btn-default">Submit</button>
    </div>

我正在尝试将用户列表中的对象作为值传递,但是它不起作用任何想法,如何实现?

显示用户的行为符合预期:

Working frontend

将空值分配给应分配用户的受让人列。

Null in H2 Database

编辑

这是任务控制器中的POST方法:

@RequestMapping(method = RequestMethod.POST)
public String saveOrUpdate(Task task){
    taskService.persistTask(task);
    return "redirect:/task/list";
}

0 个答案:

没有答案