1、springmvc和struts2的区别
springmvc是面向方法的,处理器映射器会把url映射到一个方法上,最后生成一个handler,这个handler只包含一个方法。可以单例开发也可以多例。建议使用单例。
struts2是面向类开发的,通过成员变量接收参数,无法使用单例,只能多例。
2、包装类型的参数绑定
需求:商品查询方法里实现查询条件的传入
2.1 实现方法
第一种:在形参中添加httpServletRequest request参数,通过request接收查询条件参数。
第二种:在形参中让包装类型的pojo接收查询条件参数。
2.2 页面参数和controller形参的编写规范
在jsp中获取希望查询的商品关键字,放在itemsCustom.name中
<td>输入商品名称 <input name="itemsCustom.name"/></td>
在controller中,形参传入ItemsQueryVo itemsQueryVo(ItemsQueryVo包含了itemsCustom成员)
实现了页面数据传到controller形参中
2.3 集合类型的绑定
2.3.1 数组绑定
需求:商品的批量删除,用户在界面选择多个商品,批量删除
在jsp中,name=“conroller形参的数组名”
handler中,形参设置成数组,就能得到页面传递过来的多选id数组
//批量删除的controller
@RequestMapping("/deleteItems.action")
public String deleteItems(Integer[] items_id) throws Exception{
//调用service进行批量删除
System.out.println("ids: " + items_id.length);
//重定向,而且不用加根路径
return "redirect:queryItems.action";
}
2.3.2 list绑定
批量提交数据,把数据提交到list< pojo > ,例如成绩录入
需求:批量的商品修改,在页面上输入多个商品信息,然后将商品信息提交到controller中
用户的请求:
- 请求进入商品修改页面
- 提交商品修改
下面只描述请求2)
定义pojo中包含list来接收
controller中
//提交商品修改请求
@RequestMapping("/editItemsAllSubmit.action")
// 通过itemsQueryVo 把批量商品数据存储到 itemsQueryVo.itemsCustomList
public String editItemsAll(ItemsQueryVo itemsQueryVo){
//调用多次service进行更新
return "redirect:queryItems.action";
}
jsp中
形参是 itemsQueryVo ,itemsQueryVo 中包含了成员变量itemsCustomList,jsp中通过这个规则把参数封装到itemsCustomList[index].name…
<c:forEach items="${itemsList }" var="item" varStatus="status">
<tr>
<td><input name="itemsCustomList[${status.index}].name" value="${item.name }"></td>
<td><input name="itemsCustomList[${status.index}].price" value="${item.price }"></td>
<td><input name="itemsCustomList[${status.index}].detail" value="${item.detail }"></td>
</tr>
</c:forEach>
自此,参数绑定完毕,核心是controller形参,和jsp标签的name一一对应。