码迷,mamicode.com
首页 > 编程语言 > 详细

17SpringMvc_在业务控制方法中写入包装User的模型来收集参数——解决问题

时间:2016-08-09 21:57:48      阅读:224      评论:0      收藏:0      [点我收藏+]

标签:

前一篇文章,讲了在业务方法中多个模型收集参数有一个问题,现在这篇文章就来解决一上一篇文章的问题。

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!