接上一篇:springmvc学习笔记(九):在控制器的 业务方法中,通过 Javabean 实体类 接收表单提交的数据(注解实现)
如果有两个注册表单,注册的字段完全一样,并且交给同一个控制器处理,如下:
<%-- 普通员工注册字段 和 管理员注册字段 完全相同,且交给同一个控制器处理 --%>
普通员工注册:<br>
<form action="${pageContext.request.contextPath}/emp/register.action" method="post">
姓名:<input type="text" name="username"><br>
月薪:<input type="text" name="salary" value="6666"><br>
入职时间:<input type="text" name="hiredate" value="2019-11-21"><br>
<input type="submit" value="普通员工注册">
</form>
<hr>
管理员注册:<br>
<form action="${pageContext.request.contextPath}/emp/register.action" method="post">
姓名:<input type="text" name="username"><br>
月薪:<input type="text" name="salary" value="8888"><br>
入职时间:<input type="text" name="hiredate" value="2019-11-21"><br>
<input type="submit" value="管理员注册">
</form>
在控制器的业务方法里,传入两个实体类 来接收表单提交的数据,如下:
// 业务方法里传入两个实体类 Emp 和 Admin 来接收数据
@RequestMapping(value = "/register.action", method = RequestMethod.POST)
public String register(Emp emp, Admin admin) throws Exception{
System.out.println("普通员工注册-->" + emp);
System.out.println("管理员注册-->" + admin);
return "/index.jsp";
}
其中两个实体类 Emp.java 和 Admin.java 里的属性字段也是完全一样,都和表单提交数据的 name 属性一一对应;
那么,提交之后发现,普通员工注册 提交的数据会封装到 Emp 实体类中,同时也会封装到 Admin 实体类中;
同样的,管理员注册 提交的数据会封装到 Admin 实体类中,同时也会封装到 Emp 实体类中;
即无法区分 哪个表单提交的数据 应该封装到哪个 实体类中,如下所示:
解决办法:将两个实体类再封装一层,封到一个新的 Javabean 中,如下:
public class RegisterBean {
private Emp emp;
private Admin admin;
public Emp getEmp() {
return emp;
}
public void setEmp(Emp emp) {
this.emp = emp;
}
public Admin getAdmin() {
return admin;
}
public void setAdmin(Admin admin) {
this.admin = admin;
}
}
然后将表单提交数据的 name 属性改为:在前面加上 emp,或者 admin
<%-- 普通员工注册字段 和 管理员注册字段 完全相同,且交给同一个控制器处理 --%>
普通员工注册:<br>
<form action="${pageContext.request.contextPath}/emp/register.action" method="post">
姓名:<input type="text" name="emp.username"><br>
月薪:<input type="text" name="emp.salary" value="6666"><br>
入职时间:<input type="text" name="emp.hiredate" value="2019-11-21"><br>
<input type="submit" value="普通员工注册">
</form>
<hr>
管理员注册:<br>
<form action="${pageContext.request.contextPath}/emp/register.action" method="post">
姓名:<input type="text" name="admin.username"><br>
月薪:<input type="text" name="admin.salary" value="8888"><br>
入职时间:<input type="text" name="admin.hiredate" value="2019-11-21"><br>
<input type="submit" value="管理员注册">
</form>
最后在 控制器中的业务方法里传入 封装后的 Javabean:
@RequestMapping(value = "/register.action", method = RequestMethod.POST)
public String register(RegisterBean bean) throws Exception{
System.out.println("普通员工注册-->" + bean.getEmp());
System.out.println("管理员注册-->" + bean.getAdmin());
return "/index.jsp";
}