/**
* 包装类型 绑定数组类型,可以使用两种方式,pojo的属性接收,和直接接收
*
* @param queryVo
* @return
*/
@RequestMapping("queryItem")
public String queryItem(QueryVo queryVo, Integer[] ids) {
System.out.println(queryVo.getItem().getId());
System.out.println(queryVo.getItem().getName());
System.out.println(queryVo.getIds().length);
System.out.println(ids.length);
return "success";
}
分析发现:name属性必须是list属性名+下标+元素属性。
Jsp做如下改造:
"/>
修改
${current} 当前这次迭代的(集合中的)项
${status.first} 判断当前项是否为集合中的第一项,返回值为true或false
${status.last} 判断当前项是否为集合中的最
varStatus属性常用参数总结下:
${status.index} 输出行号,从0开始。
${status.count} 输出行号,从1开始。
${status.后一项,返回值为true或false
begin、end、step分别表示:起始序号,结束序号,跳跃步伐。
通过@RequestMapping注解可以定义不同的处理器映射规则。
1.URL路径映射
@RequestMapping(value=“item”)或@RequestMapping("/item")
value的值是数组,可以将多个url映射到同一个方法
/**
* 查询商品列表
* @return
*/
@RequestMapping(value = { "itemList", "itemListAll" })
public ModelAndView queryItemList() {
// 查询商品数据
List- list = this.itemService.queryItemList();
// 创建ModelAndView,设置逻辑视图名
ModelAndView mv = new ModelAndView("itemList");
// 把商品数据放到模型中
mv.addObject("itemList", list);
return mv;
}
2.添加在类上面
在class上添加@RequestMapping(url)指定通用请求前缀, 限制此类下的所有方法请求url必须以请求前缀开头
3.请求方法限定
除了可以对url进行设置,还可以限定请求进来的方法
限定GET方法
@RequestMapping(method = RequestMethod.GET)
如果通过POST访问则报错:
HTTP Status 405 - Request method ‘POST’ not supported
例如:
@RequestMapping(value = “itemList”,method = RequestMethod.POST)
限定POST方法
@RequestMapping(method = RequestMethod.POST)
如果通过GET访问则报错:
HTTP Status 405 - Request method ‘GET’ not supported
GET和POST都可以
@RequestMapping(method = {RequestMethod.GET,RequestMethod.POST})
@Controller web层方法返回值
1.ModelAndView mav 无敌的 带着数据 返回视图路径 不建议使用
return mav
return "redirect:/itemEdit.action //重定向
return "forward:/itemEdit.action //转发
2.string 返回视图 model带数据 官方推荐此种方式 解耦 数 据 视 图 分离 MVC 建议使用
return "itemList";
3.void ajax 请求 合适 json格式数据(response 异步请求使用
@return
需要创建一个实现一个HandlerExceptionResolver接口
* 异常处理器的自定义的实现类
* */
public class yichanglmpl implements HandlerExceptionResolver {
public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object obj,
Exception e) {
//obj:是发生异常的地方Service层的方法 包名+类名+方法名(形参)字符串
ModelAndView mav=new ModelAndView();
mav.addObject("error", "未知异常");
mav.setViewName("error");
return mav;
}
然后在springmvc.xml配置
需要导入两个包
在springmvc.xml中配置文件上传解析器
在商品修改页面,打开图片上传功能,如下图:
设置表单可以进行文件上传,如下图:
`//提交修改页面 入参 为 Items对象
@RequestMapping(value = “/updateitem.action”)
// public ModelAndView updateitem(Items items){
public String updateitem(QueryVo vo,MultipartFile pictureFile) throws Exception{
//保存图片 replaceAll("-", “”);:之前的文件名跟之后的文件名 防止重复
String name = UUID.randomUUID().toString().replaceAll("-", “”);
//jpg
String ext = FilenameUtils.getExtension(pictureFile.getOriginalFilename());
pictureFile.transferTo(new File("F:\\upload\\"+name+"."+ext));
vo.getItems().setPic(name+"."+ext);
//修改
itemService.updateItemsById(vo.getItems());
//ModelAndView mav = new ModelAndView();
//mav.setViewName("success");
return "redirect:/itemEdit.action?id="+vo.getItems().getId();
//return mav;`