Две модели в виде Spring MVC

Допустим, у меня есть пользовательская модель:

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

@Column(name = "username")
private String username;

@Column(name = "password")
private String password;

@OneToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
@JoinColumn(name = "user_profile_id")
private UserProfile profile;

Модель UserProfile:

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

@Column(name = "email")
private String email;

@Column(name = "firstname")
private String firstname;

@Column(name = "lastname")
private String lastname;

Я могу добавить эту модель в контроллер:

@RequestMapping(value = {"/user/{id}"}, method = RequestMethod.GET)
public String showUser(ModelMap model, @PathVariable int id) {
    User user = userService.findById(id);
    model.addAttribute("user", user);

    return "UserView";
}

Затем можно получить доступ к модели на странице .jsp следующим образом:

<form:form method = "POST" modelAttribute = "user">
    <form:input type = "text" path = "username"/>
    <form:input type = "password" path = "password"/>
</form> 

Но вопрос в том - как я могу редактировать модель UserProfile, которая находится в модели User, в то же время, когда я редактирую модель пользователя, которая передается из контроллера на страницу .jsp?

Вопрос не повторяется, потому что я хотел знать, может ли «путь» обрабатывать иерархические атрибуты, но не как просто передать один объект для просмотра.

Пожалуйста, будьте яснее. Что вы хотите отредактировать? Во сколько? А что вы имеете в виду под словом «редактировать»?

Impulse The Fox 03.10.2018 23:33

Верно. Вы хотите, чтобы HTML-форма могла также отправлять значения полей, например user.profile.emailAddress?

dbreaux 04.10.2018 00:33

@dbreaux да, именно так

THE Waterfall 04.10.2018 07:57

@ImpulseTheFox Я нажимаю кнопку добавления пользователя, открывается форма html с вводом имени пользователя и пароля. Но, как видите, у меня есть объект UserProfile в модели User. Он также имеет несколько полей, таких как: электронная почта, имя, фамилия. И я хочу редактировать эти поля одновременно с редактированием полей имени пользователя и пароля. Таким образом, на самом деле похоже, что в форме html есть 5 входов, два из которых относятся к модели User, а остальные 3 - к модели UserProfile, которая сама содержится в модели UserProfile.

THE Waterfall 04.10.2018 08:02

Возможный дубликат Spring MVC - отправка объекта из JSP

Impulse The Fox 04.10.2018 09:16
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
5
595
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Используйте как это

<form:input type = "text" path = "profile.email"/>

И я не рекомендую вам передавать свою сущность на передний план, вместо этого используйте DTO для развязки.

Да, это ^. атрибут path может использовать атрибуты иерархического компонента.

dbreaux 04.10.2018 16:25

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