二、springmvc提高
1.参数绑定之数组(删除多个商品)
(1)修改jsp页面,添加CheckBox,添加删除按钮
(2)新建方法删除,将数组传到QueryVo里面
@RequestMapping(value = “/deletes.action”)
public ModelAndView deletes(QueryVo vo){
ModelAndView mav = new ModelAndView();
mav.setViewName(“success”);
return mav;
在QueryVo新创建对象ids,然后添加set 和get方法
Integer[] ids;
1.参数绑定之List
(1)修改jsp页面
显示前两个属性的input
(2)新建方法修改,将List传到QueryVo里面
2.@RequestMapping的使用
(1)后面的method方法的值,只有get或者只有post时候只能用一个方法提交,下面的写法两种方法都可以提交
@RequestMapping(value = “/updates.action”,method = {RequestMethod.POST,RequestMethod.GET})
(2)多个url映射到一个方法
@RequestMapping(value = “/updates.action”,"/updateshaha.action")
两个url映射方法相同
3.controller层方法返回值
(1)几种返回类型
* 1.ModelAndView 无敌的 带着数据 返回视图路径 不建议使用
* 2.String 返回视图路径 model带数据 官方推荐此种方式 解耦 数据 视图 分离 MVC 建议使用
*3.void ajax 请求 合适 json格式数据 (response 异步请求使用
(2)采用string返回值操作
第一,controller方法返回类型改为String
public String updateitem()
第二, 返回值为重定向
return “redirect:/itemEdit.action”;
4.异常处理器
(1)新建一个异常处理的类,跳转到error.jsp页面
public class CustomExceptionResolver implements HandlerExceptionResolver{
public ModelAndView resolveException(HttpServletRequest request,
HttpServletResponse response, Object obj,
Exception e) {
ModelAndView mav = new ModelAndView();
//判断异常类型
if(e instanceof MessageException){
//预期异常
MessageException me = (MessageException)e;
mav.addObject(“error”, me.getMsg());
}else{
mav.addObject(“error”, “未知异常”);
}
mav.setViewName(“error”);
return mav;
}
}
(2)自定义异常
1. 新建一个自定义异常处理的类
public class MessageException extends Exception{public class MessageException extends Exception{
private String msg;
public MessageException(String msg) {
super();
this.msg = msg;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
}
2.在可能发生异常的地方写明异常信息
if(null == null){
throw new MessageException(“商品信息不能为空”);
}
(3)在配置文件中注入
5.上传图片
(1)在Tomcat中添加图片保存到本地的设置(F:\upload)
(2) 在controller层的修改类中实现图片上传功能代码
1.public String updateitem(QueryVo vo,MultipartFile pictureFile) throws Exception{
在修改类的入参里面添加MultipartFile pictureFile,pictureFile名字必须跟jsp页面中的name属性相同。
2.随机生成图片名
String name = UUID.randomUUID().toString().replaceAll("-", “”);
3.获取上传图片的后缀//jpg
String ext = FilenameUtils.getExtension(pictureFile.getOriginalFilename());
4.将图片存到本地盘符
pictureFile.transferTo(new File(“F:\upload\” + name + “.” + ext));
5.将图片修改到数据库
vo.getItems().setPic(name + “.” + ext);
(3) 在配置文件中添加上传图片实现类
(4)editItem.jsp页面图片代码
商品图片
<c:if test="item.pic!=null"><imgsrc="/pic/{item.pic !=null}">
<img src="/pic/item.pic!=null"><imgsrc="/pic/{item.pic}" width=100 height=100/>
</c:if>
5.Json数据交互
(1)添加jq文件
(2)添加js数据
<script type="text/javascript">
$(function(){
var params = '{"id": 1,"name": "测试商品","price": 99.9,"detail": "测试商品描述","pic": "123456.jpg"}'; //将json数据<k,v>写成字符串的格式
$.ajax({
url : "${pageContext.request.contextPath }/json.action",
data : params,
contentType : "application/json;charset=UTF-8",//发送数据的格式
type : "post",
dataType : "json",//回调
success : function(data){
alert(data.name);
}
});
});
</script>
(3)为数据交互编写java代码
@RequestMapping(value = "/json.action")
public @ResponseBody
Items json(@RequestBody Items items){
return items;
}
//两个@注解为了适应各种开发环境
5.Restful风格开发
(1)在路径映射的后面加上{id}字段
(2)在方法的入参上面加入id字段
@RequestMapping(value = “/itemEdit/{id}.action”)
public ModelAndView toEdit1(@PathVariable Integer id,
HttpServletRequest request,HttpServletResponse response
,HttpSession session,Model model){
Items items = itemService.selectItemsById(id);
ModelAndView mav = new ModelAndView();
//数据
mav.addObject(“item”, items);
mav.setViewName(“editItem”);
return mav;
}