ПРИМЕЧАНИЕ. В конечном итоге моя цель - просто изменить полученный URL из «/ public/academy/register? Param = blah» на настроенный URL-адрес SEO-ified, как показано в коде. Если я ошибаюсь, пытаясь отказаться от возвращения JSP-представления успеха в сопоставлении POST вместо использования post-redirect-get (что в любом случае является хорошей практикой), я открыт для предложений.Весной 3.2, действительно ли атрибуты RedirectAttributes сами передают атрибуты? Потеря элементов
Ниже приведены два метода: сопоставление запроса POST для получения регистрационной формы и обработки его, а также метод сопоставления страницы успеха. Я добавляю атрибут flash для перенаправления, который имеет форму POSTed для первого метода.
Форма имеет иерархию свойств Form -> Schedule -> Course -> Content -> Vendors
, где каждый представляет собой свой собственный объект класса, за исключением того, что Поставщики являются SortedSet<Vendor>
. Когда я загружаю страницу успеха, я получаю исключение Hibernate, указывающее, что поставщики не могут быть лениво инициализированы. Почему это так вниз по цепочке, что она перестает загружаться, или, что более важно, почему она утрачивает эту ценность? Когда я устанавливаю точку останова перед возвратом, объект RedirectAttributes имеет продавцов, заполненных в форме, которую я передал ей. Что дает?
@RequestMapping(value = "/public/academy/register", method = RequestMethod.POST)
public String processSubmit(Site site, Section section, User user,
@ModelAttribute @Valid AcademyRegistrationForm form,
BindingResult result, Model model, RedirectAttributes redirectAttributes) {
validator.validate(form, result);
if (site.isUseStates()
&& StringUtils.isBlank(form.getBooker().getState())) {
result.rejectValue("booker.state",
"gui.page.academy.attendee.state");
}
if (result.hasErrors()) {
LOG.debug("Form has errors: {}", result.getAllErrors());
return "common/academy-registration";
}
// Form is valid when no errors are present. Complete the registration.
AcademyRegistration registration = form.toAcademyRegistration();
academyService.performRegistration(registration, site);
redirectAttributes.addFlashAttribute(form);
String redirectUrl = "redirect:/public/academy/register/"
+ registration.getSchedule().getCourse().getContent().getSeoNavTitle()
+ "-completed";
return redirectUrl;
}
@RequestMapping(value="/public/academy/register/**-completed", method=RequestMethod.GET)
public String displayRegistrationSuccess(@ModelAttribute("academyRegistrationForm") final AcademyRegistrationForm form)
{
SortedSet<Vendor> dummy = form.getSchedule().getCourse().getContent().getVendors();
return "common/academy-registration-success";
}
Вот исключение:
Oct 2, 2013 2:11:31 PM org.apache.catalina.core.ApplicationDispatcher invoke
SEVERE: Servlet.service() for servlet jsp threw exception
org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: com.horn.cms.domain.Content.vendors, could not initialize proxy - no Session
Пожалуйста, отправьте исключение спящего режима. –
Done Sotirios, спасибо за напоминание. –