У меня есть JSP singup-form.jsp , который включает в себя в основном 2 вида информации:
- информация пользователя
- информация учетной записи
singup-form.jsp :
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Sign up</title>
</head>
<body>
<h1>Sign up</h1>
<form:form action="processSignup" method="GET" modelAttribute="user">
<p>*First name</p>
<form:input path="firstName"/>
<p>Middle name</p>
<form:input path="middleName"/>
<p>*Last name</p>
<form:input path="lastName"/>
<form:form method="GET" modelAttribute="account">
<p>*Email</p>
<form:input path="userName"/>
<p>*Password</p>
<form:password path="password"/>
</form:form>
<br><br>
<input type="submit" value="Sign Up" />
</form:form>
</body>
</html>
Когда загружено signup-form.jsp , я создаю 2 отдельные модели в моем RegistrationController.java через openSignupForm(Model userModel, Model accountModel)
метод:
package tech.devhq.account.controller;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import tech.devhq.account.model.Account;
import tech.devhq.account.model.User;
@Controller
@Scope("singleton")
public class SignupController {
@RequestMapping("/signup")
public String openSignupForm(Model userModel, Model accountModel) {
User user = new User();
userModel.addAttribute("user", user);
Account account = new Account();
accountModel.addAttribute("account", account);
return "signup-form";
}
@RequestMapping("/processSignup")
public String processSignupForm(@ModelAttribute("user") User user, @ModelAttribute("account") Account account) {
return "welcome";
}
}
Когда форма отправляется, я хочу передать обе модели на страницу welcome.jsp для распечаткисоответствующие имена полей.Метод processSignupForm(@ModelAttribute("user") User user, @ModelAttribute("account") Account account)
из класса контроллера, описанного выше, должен сделать это.
Здесь необходимо, чтобы поля signup-form.jsp обрабатывались отдельно с User и Учетная запись модели.
РЕЗУЛЬТАТ выглядит следующим образом:
- Нет ошибки компиляции
- Нет времени выполненияошибка
- / signup-form Открывается URL - здесь тоже нет проблем
- Я заполняю форму, состоящую из пользователя (имя, отчество и фамилияимя) и информацию об учетной записи (адрес электронной почты / имя пользователя и пароль) и отправьте кнопку
- Без действий, без загрузки страницы, без ошибок, без изменений .. Предыдущая страница - форма регистрации остается прежней
Некоторые проверили РАБОЧИЕ ТУРЫ , которые сделали НЕ разрешение:
- Я попытался иметь одну единственную модель в контроллере и инкапсулировать обе пользователь и учетная запись объекты в него
- я пытался получитьтолько одна форма с 5 упомянутыми выше полями, но 2 modelAttribute элемент в форме.Например: modelAttribute = "user" modelAttribute = "account"
- Также я попытался создать форму, состоящую из подформ, одна для User и один раз для Счет соответственно.Таким образом, я пытался обработать родительскую форму с надеждой, что 2 дочерние формы автоматически найдут свою модель для привязки, потому что у меня было 2 модели для них
- Конечно, я пытался найти ответы на подобные вопросы.вопросы в StackOverflow.Никто из них не помог
Я хотел бы найти решение с минимальным количеством изменений кода, если это будет простой выигрыш.
РЕДАКТИРОВАТЬ:надеюсь, что это изменение поможет сузить источник проблемы, исключив следующую часть из signup-form.jsp , которая связана с информацией Account , WORKS штраф, НО Конечно, я не получаю никакой информации об учетной записи, а только о пользователе на странице welcome.jsp :
<%--
<form:form method="GET" modelAttribute="account">
<p class="field-name">*Email</p>
<form:input path="userName"/>
<p class="field-name">*Password</p>
<form:password path="password"/>
</form:form>
--%>
Спасибо за советы и мозговой штурм!
Bests, Сеймур