将多个对象绑定到 JSP form:form 标签中
Binding multiple objects into JSP form:form tag
我有一个 JSP singup-form.jsp 基本上包括两种信息:
- 用户信息
- 帐户信息
合唱-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 时,我通过 SignupController.java 创建了 2 个单独的模型 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 页面,以便打印出相应的字段名称。上面控制器class的方法processSignupForm(@ModelAttribute("user") User user, @ModelAttribute("account") Account account)
应该可以做到这一点。
这里的要求是 signup-form.jsp 的字段应该和 User 和 分开处理帐号 款。
结果如下:
- 没有编译错误
- 没有运行时错误
- /signup-form URL 正在打开 - 这里也没有问题
- 我填写由用户(名字、中间名和姓氏)和帐户信息(email/username 和密码)组成的表格,然后提交按钮
- 没有操作,没有页面加载,没有错误,没有发生任何变化..上一页 - 注册表单保持原样
有些人检查了 WORKAROUNDS NOT 解决了:
- 我尝试在控制器中使用一个模型,并将 User 和 Account 对象封装到其中
- 我尝试只有一个表单,其中包含上面提到的 5 个字段,但表单中有 2 个 modelAttribute 元素。喜欢:modelAttribute="user" modelAttribute="account"
- 我也尝试过一个由子表单组成的表单,一个用于 User,一个用于 Account。通过这种方式,我试图处理父表单,希望 2 个子表单会自动找到要绑定的模型,因为我有 2 个模型
- 当然,我已经尝试从 Whosebug 中类似问题的答案中获益。 None 人帮助了
我想要一个代码更改最少的解决方案,如果这很容易获胜的话。
编辑:希望此编辑有助于缩小问题的根源,以便从 signup-form.jsp 中排除与 [=39= 相关的以下部分]Account 信息,WORKS 很好,BUT 当然我没有得到任何关于帐户的信息,但只有关于用户的信息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>
--%>
感谢您的提示和头脑风暴!
最佳,
西默
我认为您的解决方法尝试是正确的,但可能遗漏了一些将它们联系在一起的细节。您只需要一个 <form:form>
和一个模型,其中包含两组字段,可以是子对象,也可以是直接的。
但是,如果您使用子对象,则需要将 JSP 字段命名为 user.firstName
。
例如
public class MyModel {
private User user;
private Account account;
... getters & setters
}
和
<form:form ... modelAttribute="myModelBean">
...
<form:input path="user.firstName"/>
...
<form:input path="account.userName"/>
...
</form:form>
我有一个 JSP singup-form.jsp 基本上包括两种信息:
- 用户信息
- 帐户信息
合唱-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 时,我通过 SignupController.java 创建了 2 个单独的模型 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 页面,以便打印出相应的字段名称。上面控制器class的方法processSignupForm(@ModelAttribute("user") User user, @ModelAttribute("account") Account account)
应该可以做到这一点。
这里的要求是 signup-form.jsp 的字段应该和 User 和 分开处理帐号 款。
结果如下:
- 没有编译错误
- 没有运行时错误
- /signup-form URL 正在打开 - 这里也没有问题
- 我填写由用户(名字、中间名和姓氏)和帐户信息(email/username 和密码)组成的表格,然后提交按钮
- 没有操作,没有页面加载,没有错误,没有发生任何变化..上一页 - 注册表单保持原样
有些人检查了 WORKAROUNDS NOT 解决了:
- 我尝试在控制器中使用一个模型,并将 User 和 Account 对象封装到其中
- 我尝试只有一个表单,其中包含上面提到的 5 个字段,但表单中有 2 个 modelAttribute 元素。喜欢:modelAttribute="user" modelAttribute="account"
- 我也尝试过一个由子表单组成的表单,一个用于 User,一个用于 Account。通过这种方式,我试图处理父表单,希望 2 个子表单会自动找到要绑定的模型,因为我有 2 个模型
- 当然,我已经尝试从 Whosebug 中类似问题的答案中获益。 None 人帮助了
我想要一个代码更改最少的解决方案,如果这很容易获胜的话。
编辑:希望此编辑有助于缩小问题的根源,以便从 signup-form.jsp 中排除与 [=39= 相关的以下部分]Account 信息,WORKS 很好,BUT 当然我没有得到任何关于帐户的信息,但只有关于用户的信息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>
--%>
感谢您的提示和头脑风暴!
最佳, 西默
我认为您的解决方法尝试是正确的,但可能遗漏了一些将它们联系在一起的细节。您只需要一个 <form:form>
和一个模型,其中包含两组字段,可以是子对象,也可以是直接的。
但是,如果您使用子对象,则需要将 JSP 字段命名为 user.firstName
。
例如
public class MyModel {
private User user;
private Account account;
... getters & setters
}
和
<form:form ... modelAttribute="myModelBean">
...
<form:input path="user.firstName"/>
...
<form:input path="account.userName"/>
...
</form:form>