Как назначить объект другому объекту в форме, используя ThymeLeaf? - PullRequest
0 голосов
/ 23 ноября 2018

Я работаю над Java-проектом MVC и использую Spring Boot с ThymeLeaf.У меня проблема в том, что при создании задачи я хочу выбрать и сохранить пользователя, который будет назначен для задачи.Мне удалось сделать выбор правильно, но я не могу сохранить выбранного пользователя.Он всегда сохраняется без назначенного пользователя.

Вот мой класс сущности «Задача»:

@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>

Я пытаюсь передать объект из списка пользователей в качестве значения, но он не работает. Есть идеи, как это сделать?

Показ пользователей работает должным образом:

Рабочий веб-интерфейс

Нуль присваивается столбцу, которому назначен пользователь, где должен быть назначен пользователь.

Нуль в базе данных H2

РЕДАКТИРОВАТЬ

Вот мой метод POST из контроллера задач:

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