Как Spring MVC отправлял данные в Model Obj в спящем режиме - PullRequest
0 голосов
/ 05 марта 2011

у меня

class Person  {

@OneToMany(cascade = CascadeType.ALL)
 @JoinTable(name = "person_countries", joinColumns = { @JoinColumn(name = "person_id") }, 
         inverseJoinColumns = { @JoinColumn(name = "country_id") })
 private List<Country> countries ; 

Class country {

@Id
@Column(name = "country_id")
@GeneratedValue
private  Integer country_id;


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

Теперь я показываю флажки в форме, чтобы пользователь мог выбрать более одной страны. но я запутался, как эта форма отправит объект страны человеку.

addpage.jsp

<form:form modelAttribute="personAttribute" method="POST" action="${saveUrl}">

<form:checkboxes path="countries" items="${countryList}" itemValue="country_id" itemLabel="country_name" />

Это HTML, который генерируется

<label for="countries2">uk</label></span><span><input id="countries3" name="countries" type="checkbox" value="3"/>

но я запутался, как лично эта страна хранения данных будет иметь в виду, я имею в виду, какое значение hibernate нужно будет хранить в относительной таблице, его значение или метку, поскольку название страны уже есть в базе данных. мне просто нужно сохранить его идентификатор.

Я запутался, как будет происходить картирование. потому что я не ввожу название страны. Они уже присутствуют в базе данных

Ответы [ 2 ]

0 голосов
/ 05 марта 2011

Когда Spring связывает форму с объектом, он создает экземпляр объекта (вы также можете подключить свой собственный процесс создания).

Таким образом, объект заполнен всеми необходимыми данными, но он находится в отдельном состоянии (он не принадлежит сеансу гибернации)

Когда вы объединяете объект в hibernate, он пытается загрузить существующие объекты, которые имеют тот же идентификатор, что и тот, который указан в вашем отдельном объекте. Если есть такие - они загружаются и используются.

Вот так все и работает. В вашем случае HTML должен представлять только идентификатор страны, затем эта страна должна быть загружена из базы данных (через hibernate) и установлена ​​в объекте пользователя.

Это можно сделать методом @InitBinder, зарегистрировав специальный редактор свойств, который при наличии идентификатора страны загружает весь объект страны.

0 голосов
/ 05 марта 2011

В отношении tbl хранится значение chkbox, то есть country_id, согласно нормализации правил. Вам не нужно вводить имя страны, так как они будут получены с вашей аннотацией @Jointable.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...