Spring MVC——参数装填方式

1. 默认支持类型HttpServletRequest、HttpServletResponse、HttpSession、Model、ModelMap

测试路径:%项目根%/getAllEmp.action?empno=7788

 1 @RequestMapping(value="/getAllEmp")
 2     public String getAllEmp(HttpServletRequest request,HttpServletResponse response,HttpSession session,Model model,ModelMap modelMap)
 3     {
 4         System.out.println("request:" + request.getParameter("empno"));
 5         
 6         System.out.println("response:" + response.getLocale().getCountry() +"-" + response.getLocale().getLanguage());
 7         
 8         System.out.println("session:" + session.getId());
 9         
10         List<Emp> emps = empService.getEmp();
11         
12         model.addAttribute("emps", emps);
13         
14         modelMap.addAttribute("message", "查询雇员信息成功");
15         
16         return "empQuery";//实际解析名称: 前缀"/" + main + 后缀".jsp"   /main.jsp
17     }

2. 简单类型:整型,字符串,单精度/双精度,boolean类型[注意:这种方式只能用于get请求方式,如果为post请求,必须用request获取到参数]

注意:1. 默认情况下,实际参数名称与形式参数名称一致
   2. 基本数据类型,建议使用其包装类型Integer、Boolean、Double、Float等

测试路径:%项目根%/getEmpByEmpno.action?index=${status.index+1}

 1 @RequestMapping("/getEmpByEmpno")
 2     public String getEmpByEmpno(Model model,Integer index)
 3     {
 4         System.out.println("getEmpByEmpno:index参数值---" + index);
 5         
 6         Emp emp = empService.getEmpByEmpno(index);
 7         
 8         model.addAttribute("emp", emp);
 9         
10         return "empUpdate";
11     }

2.1 简单类型:整型,字符串,单精度/双精度,boolean类型

注意: 1. 默认情况下,实际参数名称与形式参数名称一致
    2. 基本数据类型,建议使用其包装类型Integer、Boolean、Double、Float等

          3. 当实际参数名称与形式参数名称不一致时,使用注解@RequestParam标明实际参数名称
          value:指定的实际参数名称
          required:true 参数必须带
          defaultValue:参数默认值


测试路径:
%项目根%/getEmpByEmpno_2.action?index=${status.index+1}
%项目根%/getEmpByEmpno_2.action

 1 @RequestMapping("/getEmpByEmpno_2")
 2     public String getEmpByEmpno_2(Model model,@RequestParam(value="index",required=true,defaultValue="0")Integer index2)
 3     {
 4         System.out.println("getEmpByEmpno:index2参数值---" + index2);
 5         
 6         Emp emp = empService.getEmpByEmpno(index2);
 7         
 8         model.addAttribute("emp", emp);
 9         
10         return "empUpdate";
11     }

3.简单的POJO(plain old java projects)对象

注意:提交的参数名称必须与javaBean对象的属性名称一致
例如:<input type="text" name="empno" value="${emp.empno}">中的name属性值必须与参数emp对象中的empno属性名一致

4.包装的POJO对象: dept.dname dept.deptno

5.自定义参数绑定

(1) 定义类,并实现 org.springframework.core.convert.converter.Converter接口,同时重写convert()方法

 1 public class CustomerDateConverter implements Converter<String, Date> {
 2 
 3     @Override
 4     public Date convert(String param) {
 5         
 6         //将字符串类型转换为日期类型
 7         
 8         SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
 9         
10         try {
11             
12             return sdf.parse(param);
13             
14         } catch (ParseException e) {
15             e.printStackTrace();
16         }
17         
18         return null;
19     }

注意:泛型中,第一个为传入参数类型,第二个为传出的指定格式的参数类型

(2) 配置自定义参数转换器
<!-- 自定参数绑定组件 -->
<bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
<!-- 配置转换器 -->
<property name="converters">
<list>
<!-- 日期类型转换器 -->
<bean class="com.neuedu.converter.CustomerDateConverter"></bean>
</list>
</property>
</bean>

(3)将自定义参数转换器注入到适配器
<!-- 处理器适配器、处理器映射器 -->
<mvc:annotation-driven conversion-service="conversionService"></mvc:annotation-driven>

6. 集合类 List
注意:形式参数类型为引用类型Emp
实际参数类型(List)传入时,name属性值subEmps[${status.index}].empno必须与Emp对象中的属性值subEmps一致
<input type="text" name="subEmps[${status.index}].empno" value="${emp.empno}">

 1 @RequestMapping("/getSubEmps")
 2     public String getSubEmps(Model model,Integer index)
 3     {
 4         Emp emp = empService.getEmpByEmpno(index);
 5         
 6         List<Emp> subEmpList = emp.getSubEmps();
 7         
 8         model.addAttribute("subEmpList", subEmpList);
 9         
10         return "subEmpQuery";
11     }
12     @RequestMapping("/updateSubEmp")
13     public String updateSubEmp(Emp emp)
14     {
15         System.out.println("updateSubEmp:"+emp.getSubEmps());
16         
17         return "success";
18 
19     }

6. 集合类  数组

1 @RequestMapping("/deleteEmps")
2     public String deleteEmps(Integer[] indexs)
3     {
4         //delete from emp where empno in(1, 2, 3, 5);
5         System.out.println("deleteEmps:" +Arrays.toString(indexs));//[1, 2, 3, 5]
6         
7         return "success";
8     }
 1 <c:forEach items="${emps}" var="emp" varStatus="status">
 2                 <tr>
 3                     <td><input type="checkbox" name="indexs" value="${status.index+1}">${status.index+1}</td>
 4                     <td>${emp.empno}</td>
 5                     <td>${emp.ename}</td>
 6                     <td>${emp.job}</td>
 7                     <td><fmt:formatDate value="${emp.hiredate}" pattern="yyyy-MM-dd"/></td>
 8                     <td>${emp.salary}</td>
 9                     <td>${emp.comm}</td>
10                     <td>${emp.dept.dname}</td>
11                     <td>
12                         <a href="getEmpByEmpno.action?index=${status.index+1}">修改</a>
13                         <a href="getEmpByEmpno_2.action?index=${status.index+1}">修改_2</a>
14                         <a href="#?index=${status.index+1}">删除</a>
15                         <a href="getSubEmps.action?index=${status.index+1}">查看下属</a>
16                     </td>
17                 </tr>
18             </c:forEach>
原文地址:https://www.cnblogs.com/ccw95/p/6164282.html