参数绑定与传值
上篇说到了SpringMVC的工作原理及其配置;
本次主要解释的就是在前端的控制器当中各种跳转,包括方法之间的跳转,方法到页面,页面到方法之间的跳转,这是本篇博文所要提及的;
1. 功能方法之间的跳转
功能方法之间的跳转方式有两种,一种就是ModelAndView,一种就是return直接返回地址.
涉及到的绝对路径与相对路径的问题商品博文已经提到过,这而就不在赘述了。
1) ModelAndView
我们来看代码:
ModelAndViewmodelAndView=new ModelAndView();
modelAndView.setViewName("addUser2.do"); return modelAndView;
ModelAndView上篇也进行了说明。
2)return
return "addUser2.do";
但是需要注意的是,直接返回目标地址,仅仅只是进行了地址值得返回,它是不能携带数据的,若想要用数据则要用到request域的setAAttribute()和getAttribute()方法。
2. 方法和页面之间的传值
也有两种值传递得方式。
一个就是用到ModelAndView的addObject()方法,来进行值得传递;
另一个用到了一个属性就是Model属性得addAttribute()方法;
因为model只能进行值得传递,所以他需要和其它二者配合使用;
用这种两种值得传递方式与前面两种跳转方式组合即可,我们来看代码:
第一ModelAndView
@RequestMapping("/addUser2.do") public ModelAndView addUser2(HttpServletRequest request, HttpServletResponse response){ ModelAndView modelAndView=new ModelAndView(); List<UserDto> list=new ArrayList<>(); list.add(new UserDto("sss","fewfe",new Date(),25.48945)); list.add(new UserDto("sss2","fewfe",new Date(),25.25)); modelAndView.addObject("userList",list); modelAndView.setViewName("/userList.jsp"); return modelAndView; }
第二 如果是model得防止传递值
modelAndView.addObject("userList",list);
只需要把这句话改成:
model.addAtteibute("userList",list);即可,当然它也可以配合return来使用;
3. 从页面到方法之间得传值
从页面到控制器,控制器有三只接受值得方式:
一 就是用,request.getParameter(name);这种方式最简单就不做解释;
二 就是指定类型接受参数,若是数组直接声明为该name得数组即可;
但是如果是类型不匹配,这样是经不去控制器的;
三 就是封装一个Dto的对对象来接受这些数据,这个对象的属性值,需要与页面提交的数据保持一致,如果只是一部分的还,则会有数据的丢失;
第三种是对第二种的优化,所以我们直接来看第三种的代码;
@RequestMapping("/addUser.do") public ModelAndView addUser(UserDto dto){ ModelAndView modelAndView=new ModelAndView(); String [] ages=dto.getAge(); for (String age : ages) { System.out.println(age); } modelAndView.setViewName("addUser2.do"); return modelAndView; }
4. 特殊数据的处理
我们在做项目的时候通常会遇到一些一些特殊数据如Date类型的数据,页面是不能识别这种类型的,所以小编的建议是直接使用long或者是String类型,这样更加的便捷,‘但是如果是用到了这种数据类型,我们也是可以解决的,
因为<mvc:annotation-driven></mvc:annotation-driven>Springmvc提供的自动注册时支持一些数据的绑定的,具体小编的其它博文也有介绍,大家可以去看,
所以在这里我们可以用一个数据绑定的注解@DateTimeFormate(pattern=”yyyy-MM-dd”)
当然日期的格式可以自己去定义,这里只是一个例子,当然除了这个注解还有比如说@NUmberFormate等大家可以去了解我就不一一诉说了。
5. 5.嵌套绑定数据
最后我们来简单了解一下嵌套绑定数据呢?
首先时两个Dto A and A=B
就是在A的属性提交当中包含B的属性,大体就是这样,那么怎么提交和接受呢?
很简单
在页面上面的提交:name=”A.(B的属性名)”
接受:A的对象dto.getA().get(B的属性名)()
没错就是这样。