Как обрабатывать две пружинные формы на одной странице с соответствующими действиями отправки?

У меня есть две весенние формы на одной странице с их собственными действиями отправки:

JSP:

<form:form id="frm_user_login" class="animated fadeIn" method="post" action="./loginsubmit.htm" commandName="useSignInFm">

<form:form id="frm_user_register" class="animated fadeIn" method="post" action="./registersubmit.htm" commandName="userRegistrationForm">

И их соответствующие отображения в одном контроллере:

Контроллер илит:

@RequestMapping(value = "/loginsubmit.htm", method = RequestMethod.POST)
public ModelAndView signIn(@ModelAttribute("useSignInFm") SignInForm signInForm, BindingResult bindingResult,
        Model model, HttpServletRequest request)

@RequestMapping(value = "/registersubmit.htm", method = RequestMethod.POST)
public ModelAndView userRegistration(@ModelAttribute("userRegistrationForm") UserRegistrationForm userRegistrationFm, 
        BindingResult bindingResult,Model model, HttpServletRequest request)

Отправка одной формы (userRegistrationForm) дает исключение другой формы:

Neither BindingResult nor plain target object for bean name 'useSignInFm' available as request attribute.

Как я могу справиться с этим?

1 ответ

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

Так что попробуйте, это сработало в моем случае, очень похоже на ваше:

@RequestMapping(value = "/loginsubmit.htm", method = RequestMethod.POST)
public ModelAndView signIn(@Valid @ModelAttribute("useSignInFm") SignInForm signInForm, 
BindingResult bindingResult, @ModelAttribute("userRegistrationForm") 
UserRegistrationForm userRegistrationFm, Model model, HttpServletRequest request)

@RequestMapping(value = "/registersubmit.htm", method = RequestMethod.POST)
public ModelAndView userRegistration(@Valid @ModelAttribute("userRegistrationForm") 
UserRegistrationForm userRegistrationFm, BindingResult bindingResult,
@ModelAttribute("useSignInFm") SignInForm signInForm, Model model, HttpServletRequest request)

Обратите внимание, что я добавил аннотацию @Valid, потому что я предполагаю, что вы хотите проверять первую форму в каждом сопоставлении запроса. Также будьте осторожны с положением параметра bindingResult: он должен следовать за параметром @ModelAttribute, результаты привязки которого вы хотите рассмотреть.

Ни BindingResult, ни простой целевой объект для имени компонента 'useSignInFm' не доступны в качестве атрибута запроса

означает, что нет элемента с идентификатором / именем, совпадающим с "useSignInFm". Вы должны начать исправлять это в первую очередь.

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