Как передать form'е несколько объектов в Java Spring + Thymeleaf?

103
03 января 2021, 01:00

Предположим у меня есть 3 абсолютноо разные сущности (entities):
- User
- Customer
- Address

В контролере я пишу так:

@GetMapping
    public ModelAndView registration(){
        ModelAndView modelAndView = new ModelAndView();
        User user = new User();
        Customer customer = new Customer();
        Address address = new Address();
        modelAndView.addObject("user", user);
        modelAndView.addObject("address", address);
        modelAndView.addObject("customer", customer);
        modelAndView.add
        modelAndView.setViewName("registration");
        return modelAndView;
    }

Далее я хочу иметь "доступ" к данным объектам в form'е:

<form th:action="@{/registration}" th:object="user, address, customer" method="POST">
    <label>Имя
        <input type="text" th:field="*{customer.name}" name="email" th:placeholder="name">
    </label>
    <br>
    <label>Фамилия
        <input type="text" th:field="*{customer.surname}" name="email" th:placeholder="surname">
    </label>
    <br>
    <label>Email
        <input type="text" th:field="*{user.email}" name="email" th:placeholder="email">
    </label>
    <br>
    ...
    ...
    ...
</form>

Ошибка указывает на th:object="user, address, customer". Как правильно "вызывать" объекты в форме? Я так же видел (в IDE), что можно сделать через Map, но не знаю как.

Update 1

Нашел один из вариантов решения: просто не писать th:object

Answer 1

Взятый за основу ответ: сссылка

Один из вариантов (рабочий): Не использовать в форме th:object, а просто передавать значения через th:field или (как предлагает автор ответа) th:value.

Пример кода:

<label>Имя
        <input type="text" th:field="*{customer.name}" name="name" th:placeholder="name">
    </label>
    <br>
    <label>Фамилия
        <input type="text" th:field="*{customer.surname}" name="surname" th:placeholder="surname">
    </label>
    <br>

Дополнительные примеры кода:

    @GetMapping
    public ModelAndView registration(){
        ModelAndView modelAndView = new ModelAndView();
        User user = new User();
        Customer customer = new Customer();
        Address address = new Address();
        modelAndView.addObject("user", user);
        modelAndView.addObject("address", address);
        modelAndView.addObject("customer", customer);
        modelAndView.setViewName("registration");
        return modelAndView;
    }
    @PostMapping
    public ModelAndView createNewUser(@Valid User user, Address address, Customer customer, BindingResult bindingResult) {
        ModelAndView modelAndView = new ModelAndView();
        User userExists = userService.findUserByEmail(user.getEmail());
        System.out.println("______");
        System.out.println("______");
        System.out.println(user);
        System.out.println(address);
        System.out.println(customer);
        System.out.println("______");
        System.out.println("______");
    return modelAndView;
}
READ ALSO
Таймер в Firebase

Таймер в Firebase

Можно ли как-нибудь сделать таймер в Firebase Firestore, чтобы через день после создания удалялась запись?

111
Написать компаратор по двум полям

Написать компаратор по двум полям

Есть объекты с двумя полями - String uuid и String fullNameИзначально компаратор был написан для сортировки по uuid,

93
Hibernate @OneToMany. Проблема с CascadeType

Hibernate @OneToMany. Проблема с CascadeType

Проблема: при указании всех CascadeType, кроме CascadeTypeREMOVE над полем private List<Course> courses в классе Instructor, при сохранении объекта класса Instructor не происходит...

119
Как изменить фон TextView элемента в списке?

Как изменить фон TextView элемента в списке?

У меня есть класс Main3Activity, в нем я использую adapter

113