标签:
前一篇文章,讲了在业务方法中多个模型收集参数有一个问题,现在这篇文章就来解决一上一篇文章的问题。
User和Admin是两个不同的实体类。我们解决问题的方法是:
如果多个模型中有相同的属性时,可以用user.name或admin.name来收集客户端参数。就是用一个新的模型将User和Admin再封装一次。
给出案例的结构图:
上面结构图中用到了Admin.java;Bean.java;UserAction.java;springmvc_008.xml;spring.xml;web.xml;person.xml;
下面给出具体的案例代码:我只给出person.jsp的代码以及UserAction(控制器).java。
person.jsp:注意:<input type="text" name="user.username" value="${user.username }" /></td>
name的写法都是这么写的。因为bean把uesr和admin又包了一层,相当于user.name和admin.name才是最基础的元素。
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>My JSP ‘index.jsp‘ starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> </head> <body> <hr> 普通用户 <form action="${pageContext.request.contextPath}/user/register.action" method="post"> <table border="2" align="center"> <tr> <th>姓名</th> <td> <input type="text" name="user.username" value="${user.username }" /></td> </tr> <tr> <th>薪水</th> <td> <input type="text" name="user.salary" value="${!empty user.salary?user.salary:‘2012‘}" /> </td> </tr> <tr> <th>入职时间</th> <!-- ${!empty user.hiredate?user.hiredate:‘2015-4-3 12:12:12‘} 表示user.hiredate不是为空的话就给他赋user.hiredate的值 如果是空的就给他赋‘2015-4-3 12:12:12‘这个值。 --> <td> <input type="text" name="user.hiredate" value="${!empty user.hiredate?user.hiredate:‘2015-4-3 12:12:12‘} "/></td> </tr> <tr> <td> <input type="submit" value="普通用户注册"> </td> </tr> </table> </form> </hr> <hr> 管理员用户 <form action="${pageContext.request.contextPath}/user/register.action" method="post"> <table border="2" align="center"> <tr> <th>姓名</th> <td> <input type="text" name="admin.username" value="${admin.username }" /></td> </tr> <tr> <th>薪水</th> <td> <input type="text" name="admin.salary" value="${admin.salary }" /> </td> </tr> <tr> <th>入职时间</th> <!-- ${!empty user.hiredate?user.hiredate:‘2015-4-3 12:12:12‘} 表示user.hiredate不是为空的话就给他赋user.hiredate的值 如果是空的就给他赋‘2015-4-3 12:12:12‘这个值。 --> <td> <input type="text" name="admin.hiredate" value="${admin.hiredate }"/></td> </tr> <tr> <td> <input type="submit" value="管理员注册"> </td> </tr> </table> </form> </hr> </body> </html>
UserAction.java的代码:
package com.guigu.shen.Action8; import java.text.SimpleDateFormat; import java.util.Date; import javax.servlet.http.HttpServletRequest; import org.springframework.beans.propertyeditors.CustomDateEditor; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.ServletRequestDataBinder; import org.springframework.web.bind.annotation.InitBinder; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; /** * * 请求路径可以拆分为:根模块的名字+分模块的名字 就是相当于当访问http://127.0.0.1:8080:项目名/user/register时就会进入到 registerMethod方法。 */ @Controller @RequestMapping(value="/user")//根模块的请求名字 public class UserAction { /* * 员工注册 * */ @RequestMapping(method=RequestMethod.POST,value="/register")//分模块的请求名字 /* 采用模型的方式(User)来收集从页面传来的参数。 方法里面的参数user和以前的参数一样会被用反射的方式去赋值。
bean类把User和Admin又封装了一层。 */ public String registerMethod(Bean bean,Model model) { //打印出user里面的信息 System.out.println("员工的信息是"+bean.getUser()); //打印出Admin的信息 System.out.println("管理员的信息"+bean.getAdmin()); //将user和admin绑定到model对象中去。 model.addAttribute("user", bean.getUser()); model.addAttribute("admin", bean.getAdmin()); //model.addAttribute("bean", bean); //数据回显到person.jsp页面 return "/person.jsp"; } /** * 自定义类型转换器 * 就是说当Date类型的数据不能得到时,会自动查找@InitBinder注解过的方法 * */ @InitBinder protected void initBinder(HttpServletRequest request,ServletRequestDataBinder binder) throws Exception { binder.registerCustomEditor(Date.class, new CustomDateEditor(new SimpleDateFormat("yyyy-MM-dd"),true)); } }
bean类代码:
package com.guigu.shen.Action8; public class Bean { private User user; private Admin admin; /** * @return the user */ public User getUser() { return user; } /** * @param user the user to set */ public void setUser(User user) { this.user = user; } /** * @return the admin */ public Admin getAdmin() { return admin; } /** * @param admin the admin to set */ public void setAdmin(Admin admin) { this.admin = admin; } }
结果:测试一切正常。
17SpringMvc_在业务控制方法中写入包装User的模型来收集参数——解决问题
标签:
原文地址:http://www.cnblogs.com/shenxiaoquan/p/5754724.html