Spring: Как мне создать этот объект команды с помощью GET HTTP-запроса?
Я использую Spring 3.1.0.RELEASE с Hibernate 4.0.1.Final. Я хочу вызвать метод поиска в контроллере, который принимает в качестве входных данных компонент поиска (компонент событий ниже) ...
@RequestMapping(value = "/search_results.jsp")
public ModelAndView processSearch(final HttpServletRequest request, final Event searchBean, final BindingResult result) {
...
}
Компонент события содержит следующее поле...
@Entity
@Table(name = "EVENTS")
public class Event implements Comparable {
...
@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name="EVENT_FEED_ID")
private EventFeed eventFeed;
...
}
в котором объект EventFeed содержит следующие поля...
@Entity
@Table(name = "EVENT_FEEDS")
public class EventFeed {
@Id
@Column(name = "ID")
@GeneratedValue(strategy=GenerationType.AUTO)
private Integer id;
@NotEmpty
@Column(name = "TITLE")
private String title;
...
}
Как создать URL-адрес таким образом, чтобы поле Event.getEventFeed(). GetId() поискового компонента было заполнено?
Я понимаю, что мог бы отправить запрос GET с параметром, таким как "eventFeedId=2", и заполнить все вручную, но, поскольку другие страницы отправляют запросы, которые заполняют объект команды, я хотел бы продолжать использовать ту же логику.
1 ответ
Это было бы
/search_results.jsp?event.eventFeed.id=...&event.eventFeed.title=...
event
имя атрибута модели по умолчанию, как определено в @ModelAttribute
другие правила связывания описаны в 5.4.1. Установка и получение основных и вложенных свойств.
Однако обратите внимание, что этот подход может вызвать проблемы, если вы позже свяжете эти компоненты с сеансом Hibernate. Например, если вы хотите прикрепить новый Event
к существующему EventFeed
позвонив merge()
это также переопределило бы title
имущество. Таким образом, в таком случае было бы лучше избежать чрезмерного использования привязки данных и вместо этого передавать примитивы в качестве параметров.