首先我们还是把包全部导入
之后我们了解下springmvc的具体的操作流程。。。
import cn.itcast.ssm.pojo.Items; import cn.itcast.ssm.service.finditcast; @Controller public class ItemsController { @Autowired private finditcast FItems; @RequestMapping("/list") public ModelAndView allItems() { List<Items> list=FItems.findallitcast(); ModelAndView ModelAndView=new ModelAndView(); ModelAndView.addObject("itemList", list); ModelAndView.setViewName("itemList"); return ModelAndView; } }
@RequestMapping用法
URL路径映射
@RequestMapping(value="/item")或@RequestMapping("/item)
value的值是数组,可以将多个url映射到同一个方法
窄化请求映射
@RequestMapping有多种用法
在class上添加@RequestMapping(url)指定通用请求前缀, 限制此类下的所有方法请求url必须以请求前缀开头,通过此方法对url进行分类管理。
如下:
@RequestMapping放在类名上边,设置请求前缀
@Controller
@RequestMapping("/item")
方法名上边设置请求映射url:
@RequestMapping放在方法名上边,如下:
@RequestMapping("/queryItem ")
访问地址为:/item/queryItem
请求方法限定
u 限定GET方法
@RequestMapping(method = RequestMethod.GET)
如果通过Post访问则报错:
HTTP Status 405 - Request method 'POST' not supported
例如:
@RequestMapping(value="/editItem",method=RequestMethod.GET)
u 限定POST方法
@RequestMapping(method = RequestMethod.POST)
如果通过Post访问则报错:
HTTP Status 405 - Request method 'GET' not supported
GET和POST都可以
@RequestMapping(method={RequestMethod.GET,RequestMethod.POST})
参数绑定操作的注意事项
我们来举3个例子看一下
第一个例子
简单数据传输
一般都是get
根据id来查询要修改的商品
传输url
/itemEdit.action?id=**
这里我们可以不去使用ModelAndView,直接使用string返回jsp的名字,注意下参数里的id,简单的传输是需要和我们传输的名字是一致的id
@RequestMapping("/itemEdit") public String itemEdit(Integer id, Model model) { Items items = itemService.getItemById(id); //向jsp传递数据 model.addAttribute("item", items); //设置跳转的jsp页面 return "editItem"; }
@RequestParam 也是可以的进行操作,
使用@RequestParam常用于处理简单类型的绑定。
value:参数名字,即入参的请求参数名字,如value=“item_id”表示请求的参数区中的名字为item_id的参数的值将传入;
required:是否必须,默认是true,表示请求中一定要有相应的参数,否则将报;
TTP Status 400 - Required Integer parameter 'XXXX' is not present
defaultValue:默认值,表示如果请求中没有同名参数时的默认值
传输url
/itemEdit.action?id=**
定义如下:
public String editItem(@RequestParam(value="id",required=true) String item_id) {
}
item_id为我们之后可以自己定义的名字
形参名称为id,但是这里使用value=" item_id"限定请求的参数名为id,所以页面传递参数的名必须为id。
注意:如果请求参数中没有id将跑出异常:
HTTP Status 500 - Required Integer parameter 'item_id' is not present
这里通过required=true限定item_id参数为必需传递,如果不传递则报400错误,可以使用defaultvalue设置默认值,即使required=true也可以不传item_id参数值
绑定pojo的操作
第二个例子是
1.将页面修改后的商品信息保存到数据库中。
请求的url:/updateitem.action
参数:表单中的数据。
响应内容:更新成功页面
如果提交的参数很多,或者提交的表单中的内容很多的时候可以使用pojo接收数据。要求pojo对象中的属性名和表单中input的name属性一致。
页面定义如下;
<input type="text" name="name"/>
<input type="text" name="price"/>
请求的参数名称和pojo的属性名称一致,会自动将请求参数赋值给pojo的属性。
@RequestMapping("/updateitem")
public String updateItem(Items items) {
itemService.updateItem(items);
return "success";
}
注意:提交的表单中不要有日期类型的数据,否则会报400错误。如果想提交日期类型的数据需要用到后面的自定义参数绑定的内容。
高级的数据绑定
在商品列表页面选中多个商品,然后删除。
此功能要求商品列表页面中的每个商品前有一个checkbook,选中多个商品后点击删除按钮把商品id传递给Controller,根据商品id删除商品信息。
jsp的操作
<c:forEach items="${itemList }" var="item"> <tr> <td><input name="ids" value="${item.id}" type="checkbox"></td> <td>${item.name }</td> <td>${item.price }</td> <td><fmt:formatDate value="${item.createtime}" pattern="yyyy-MM-dd HH:mm:ss"/></td> <td>${item.detail }</td>
<td><a href="${pageContext.request.contextPath }/itemEdit.action?id=${item.id}">修改</a></td>
</tr>
</c:forEach>
@RequestMapping("/queryitem") public String queryItem(QueryVo queryVo, String[] ids) { System.out.println(queryVo.getItems().getName()); System.out.println(queryVo.getItems().getPrice()); System.out.println(ids.toString()); return null; }
这里我们需要先分析下,批量删除的操作的一定是需要多个数据id来操作的,那这多个id也是在一个数组中操作得到的,我们这里传出的也就是一个数组的操作
如图在代码中的显示
<table width="100%" border=1> <tr> <td>商品名称</td> <td>商品价格</td> <td>生产日期</td> <td>商品描述</td> <td>操作</td> </tr> <tr> <td><input name="ids" value="1" type="checkbox"></td> <td>台式机</td> <td>3000.0</td> <td>2016-02-03 13:22:53</td> <td></td> <td><a href="/springmvc-web/itemEdit.action?id=1">修改</a></td> </tr> <tr> <td><input name="ids" value="2" type="checkbox"></td> <td>笔记本</td> <td>6000.0</td> <td>2015-02-09 13:22:57</td> <td></td> <td><a href="/springmvc-web/itemEdit.action?id=2">修改</a></td> </tr> <tr> <td><input name="ids" value="3" type="checkbox"></td> <td>背包</td> <td>200.0</td> <td>2015-02-06 13:23:02</td> <td></td> <td><a href="/springmvc-web/itemEdit.action?id=3">修改</a></td> </tr> </table>
我们一定得到的数组的操作,就是[1.2.3]的操作
那现在我们在控制器里就有了两种的方法,1.直接传入到我们的数组中,2.