Как назначить объект другому объекту в форме с помощью ThymeLeaf?

Я работаю над проектом Java MVC и использую 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>

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

Отображение работы пользователей, как ожидалось:

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

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

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

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

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

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

как выглядит ваш метод публикации?

Simon Martinelli 23.11.2018 15:41

@SimonMartinelli Я обновил вопрос с помощью соответствующего метода POST.

Jan Kraus 23.11.2018 16:13

Если вы установите точку останова в методе saveOrUpdate, назначен ли пользователь?

Simon Martinelli 23.11.2018 16:41

@SimonMartinelli, пользователь не назначен. Правопреемник не указан.

Jan Kraus 23.11.2018 16:44
1
4
230
0

Другие вопросы по теме