Как обрабатывать две пружинные формы на одной странице с соответствующими действиями отправки?
У меня есть две весенние формы на одной странице с их собственными действиями отправки:
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". Вы должны начать исправлять это в первую очередь.