1 包装类型pojo参数绑定
采用类似struts中对象.属性的方式命名,需要将pojo对象作为一个包装对象的属性,action中以该包装对象作为形参。
1.1 需求
商品查询controller方法中实现商品查询条件传入。
1.2 实现方法
第一种方法:在形参中添加HttpServletRequest request参数,通过request接收查询条件参数。(比较笨不建议 使用)
第二种方法:在形参中让包装类型的pojo接收查询条件参数。
分析:
页面传参数的特点:复杂,多样性。条件包括 :用户账号、商品编号、订单信息。。。
如果将用户账号、商品编号、订单信息等放在简单pojo(属性是简单类型)中,pojo类属性比较多,比较乱。
建议使用包装类型的pojo,pojo中属性是pojo。
1.3 页面参数和controller方法形参定义
页面参数:
商品名称:<inputname="itemsCustom.name"/>
注意:itemsCustom和包装pojo中的属性一致会自动将请求参数赋值给pojo的属性。
controller方法形参:
publicModelAndView queryItems(HttpServletRequest request,ItemsQueryVoitemsQueryVo) throwsException
public class ItemsQueryVo{
private Items items;
//为了系统的扩展,对原始生成的po进行扩展
private ItemsCustom itemsCustom;
2 集合类型绑定
2.1 数组绑定
2.1.1 需求
商品批量删除,用户在页面选择多个商品,批量删除。
2.1.2 表现层实现
关键:将页面选择(多选)的商品id,传到controller方法的形参,方法形参使用数组接收页面请求的多个商品id。
controller方法定义:
// 批量删除
@RequestMapping("/deleteItems")
public String deleteItems(Integer[] items_id) throws Exception {
System.out.println("234234");
// 调用service批量删除商品
// ...
for (Integer integer : items_id) {
System.out.println(integer);
}
return "success";
}
页面定义:
<c:forEach items="${itemsList }" var="items">
<tr>
<td><input type="checkbox"name="items_id" value="${items.id}"/></td>
<td>${items.name }</td>
<td>${items.price }</td>
<td><fmt:formatDate value="${items.createtime}"pattern="yyyy-MM-dd HH:mm:ss"/></td>
<td>${items.detail }</td>
<td><a href="${pageContext.request.contextPath }/items/editItems.action?id=${items.id}">修改</a></td>
</tr>
</c:forEach>
2.2 list绑定
2.2.1 需求
通常在需要批量提交数据时,将提交的数据绑定到list<pojo>中,比如:成绩录入(录入多门课成绩,批量提交),
本例子需求:批量商品修改,在页面输入多个商品信息,将多个商品信息提交到controller方法中。
2.2.2 表现层实现
controller方法定义:
1、进入批量商品修改页面(页面样式参考商品列表实现)
2、批量修改商品提交
使用List接收页面提交的批量数据,通过包装pojo接收,在包装pojo中定义list<pojo>属性
/*
* 定义包装对象
* Vo 表现层的东西;
* 包装对象定义好可以从表现层一直传递到持久层
* 不要用继承,集成不利于扩展
*/
public class ItemsQueryVo {
private Items items;
//为了系统的扩展,对原始生成的po进行扩展
private ItemsCustom itemsCustom;
//用户的信息 用扩展类,不用原始生成的,为了扩展性。应为将来有可能需要再次使用逆向工程生成一下源文件
private UserCustom userCustom;
//批量商品信息修改
privateList<ItemsCustom> itemslist;
// 批量修改商品的提交
// 通过ItemsQueryVo接收鼻梁提交是商品信息存储到ItemsQueryVo的itemslist中
@RequestMapping("/editItemsAllSubmit")
public StringeditItemsAllSubmit(ItemsQueryVo itemsVo) throws Exception {
System.out.println(itemsVo.getItemslist().get(0).getName());
return "success";
}
页面定义:
注意空格不能有多余空格
2.3 map绑定
也通过在包装pojo中定义map类型属性。
在包装类中定义Map对象,并添加get/set方法,action使用包装对象接收。
包装类中定义Map对象如下:
Public class QueryVo {
private Map<String, Object> itemsInfo= new HashMap<String, Object>();
//get/set方法..
}
页面定义如下:
<tr>
<td>学生信息:</td>
<td>
姓名:<inputtype="text"name="itemInfo['name']"/>
年龄:<inputtype="text"name="itemInfo['price']"/>
.. .. ..
</td>
</tr>
Contrller方法定义如下:
public String useraddsubmit(Modelmodel,QueryVo queryVo )throws Exception{
System.out.println(queryVo.getStudentinfo());
}