springMVC框架学习(4)-高级参数绑定,@RequestMapping,方法的返回类型

一,高级参数绑定

1.数组的参数绑定

1).需求
在商品列表选择多个商品进行批量删除,此功能要求商品列表页面中的每个商品前有一个checkbook,选中多个商品后点击删除按钮把商品id传递给Controller,根据商品id删除商品信息。
2).jsp页面部分代码

<c:forEach items="${itemList }" var="item">
<tr>
	<td><input name="ids" type="checkbox" value="${item.id }"></td>
	<td>${item.name }</td>
	<td>${item.price }</td>
</tr>
</c:forEach>
</table>
<button type="submit">批量删除</button>

选中多个页面会吧ids以数组的形式传给controller
3).controller接收
Controller方法中可以用Int[] ids接收,或者pojo的int[] ids属性接收

@RequestMapping("/list")
	public ModelAndView delete(QueryVo queryvo ,int[] ids) {
	...
	}

pojo

public class QueryVo {
	private int[] ids;
}

2.集合的参数绑定

1).需求
实现商品数据的批量修改,要想实现商品数据的批量修改,需要在商品列表中可以对商品信息进行修改,并且可以批量提交修改后的商品数据。
2).jsp页面部分代码

<c:forEach items="${itemList }" var="item" varStatus="status">
<tr>
	<td><input name="ids" type="checkbox" value="${item.id }"></td>
	<td><input name="itemList[${status.index}].name" value="${item.name }"/></td>
	<td><input name="itemList[${status.index}].price" value="${item.price }"/></td>
	<td><input name="itemList[${status.index}].createtime" value="<fmt:formatDate value="${item.createtime}" pattern="yyyy-MM-dd HH:mm:ss"/>"/></td>
	<td><input name="itemList[${status.index}].detail" value="${item.detail }"/></td>
	
	<td><a href="${pageContext.request.contextPath }/itemEdit.action?id=${item.id}">修改</a></td>
</tr>
</c:forEach>
</table>
<button type="submit">批量删除</button>
<button type="submit">批量修改</button>

varStatus属性常用参数:
${status.index} 输出行号,从0开始。
${status.count} 输出行号,从1开始。
${status.current} 当前这次迭代的(集合中的)项
${status.first} 判断当前项是否为集合中的第一项,返回值为true或false
${status.last} 判断当前项是否为集合中的最后一项,返回值为true或false
begin、end、step分别表示:起始序号,结束序号,跳跃步伐。

3).controller接收
List中存放对象,并将定义的List放在包装类中,使用包装pojo对象接收
pojo

public class QueryVo {
	private int[] ids;
	private List<Items> itemList;
	...
}

controller

@RequestMapping("/list")
	public ModelAndView edit(QueryVo queryvo ,int[] ids) {
	...
	}

可以看到pojo里的属性itemList接收了数据
在这里插入图片描述
注意:接收List类型的数据必须是pojo的属性,方法的形参为List类型无法正确接收到数据。

二,@RequestMapping注解

1.URL路径映射

@RequestMapping(value="/list")或@RequestMapping("/list")
value的值是数组,可以将多个url映射到同一个方法

@RequestMapping(value={"/list","/item","/itemlist"})
	public ModelAndView showList(QueryVo queryvo ,int[] ids) {
	}

2.请求方法限定

限定get方法,只能接收get请求
@RequestMapping(method = RequestMethod.GET)
method的值也是数组,可以限定多个
@RequestMapping(method={RequestMethod.GET,RequestMethod.POST})

3.窄化请求映射

在class上添加@RequestMapping(url)指定通用请求前缀, 限制此类下的所有方法请求url必须以请求前缀开头,通过此方法对url进行分类管理。

@Controller
@RequestMapping("/item")
public class ItemsController {
	@RequestMapping("/list")
	public ModelAndView showList() {
		return modelAndView;
	}

访问地址为:/item/list

三,Controller方法的返回类型

1.返回ModelAndView

controller方法中定义ModelAndView对象并返回,对象中可添加model数据、指定view。

@RequestMapping("/list")
	public ModelAndView showList(QueryVo queryvo ,int[] ids) {
		List<Items> list = itemsService.findAll();
		ModelAndView modelAndView = new ModelAndView();
		modelAndView.addObject("itemList", list);
		modelAndView.setViewName("itemList");
		return modelAndView;
	}

2.返回void

如果想跳转页面,只能使用servlet方式
request.getRequestDispatcher("/WEB-INF/jsp/editItem.jsp").forward(request, response);

3.返回String

1).逻辑视图名

@RequestMapping("/itemEdit")
	public String itemEdit(HttpServletRequest request,Model model) {
		// 指定逻辑视图名,经过视图解析器解析为jsp物理路径:
		// /WEB-INF/jsp/item/editItem.jsp
		return "editItem";
	}

2).Redirect重定向

//通知浏览器,让浏览器重新发起请求,使用的两个不同的request域
return "redirect:list.action";

3).forward转发

//浏览器保留原有的请求地址,使用的是同一个request域
return "forward:list.action"; 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值