1.在SpringMVC后台控制层获取参数的方式主要有两种
(1)一种是("name")
(2)另外一种是用注解@RequestParam直接获取
<1>@RequestParam(value="collectorId") String collectorId
<2>value可以省略:@RequestParam("collectorId") String collectorId
2.@PathVariable、@RequestParam 、@RequestBody的区别
(1)@PathVariable也可以获取参数
<1>在url中已经预留了变量的占位符时,需要使用@PathVariable
<2>是路径(path)上的变量(variable),例如:
@RequestMapping(value="/springmvc/{param1}", method = )
public String getDetails (
@PathVariable("param1") String param1) {...}
<3>实现GET请求的url是:http://localhost:8080/springmvc/param1value
<4>由于使用@PathVariable需要将参数带在URL后面,不安全,因此一般不用这种方式
(2)@RequestParam获取参数
<1>url中没有预留参数的占位符时,需要使用@RequestParam
<2>是请求(Request)中的参数(Param),提交方式GET、POST
@RequestMapping(value="/springmvc", method = )
public String getDetails (
@RequestParam("param1", required=true) String param1,
@RequestParam(value="param2", required=false) String param2){...}
<3>>实现GET请求的url是:http://localhost:8080/springmvc?param1=10¶m2=20
<4>value可以省略,并且默认required=true也可以省略
(3)@RequestBody获取参数
<1>在url中没有预留参数的占位符,且请求中包含结构体对象时,需要使用@RequestBody
<2>是请求(Request)中的结构体对象(Body)
<3>应用实例:User为对象
@RequestMapping(value="/springmvc", method = )
public String getDetails (@RequestBody User user) {... }
<4>实现GET请求的url是:
$scope.user = {
username: "foo",
auth: true,
password: "bar"};
$http.get('http://localhost:8080/springmvc', $scope.user)
、Model、ModelMap的区别与使用
(1)Model 是一个接口
<1>其实现类为ExtendedModelMap,继承了ModelMap类
<2>public class ExtendedModelMap extends ModelMap implements Model
(2)ModelMap的声明格式:
<1>public class ModelMap extends LinkedHashMap<String, Object>
<2>ModelMap对象主要用于传递控制方法处理数据到结果页面
2.1.也就是说把结果页面上需要的数据放到ModelMap对象中即可
2.2.作用类似于request对象的setAttribute方法的作用
2.3.用来在一个请求过程中传递处理的数据
<3>ModelMap或者Model通过addAttribute方法向页面传递参数
3.1.在页面上可以通过el表达式语言$attributeName标签获取并展示modelmap中的数据
3.本身不能设置页面跳转的url地址别名或者物理跳转地址
3.3.可以通过控制器方法的字符串返回值来设置跳转url地址别名或者物理跳转地址
(3)ModelAndView对象有两个作用:
<1>设置转向地址,这也是ModelAndView和ModelMap的主要区别
1.1.设置方式如下所示:ModelAndView view = new ModelAndView("path:ok");
1.2.或者通过setViewName方式:public void setViewName(String viewName){...}
<2>将控制器方法中处理的结果数据传递到结果页面
2.1.就是把在结果页面上需要的数据放到ModelAndView对象中即可
2.2.作用类似于request对象的setAttribute方法的作用,用来在一个请求过程中传递处理的数据
(4)使用方式如下:
<1>ModelMap的实例是spirng mvc框架自动创建并作为控制器方法参数传入,用户无需自己创建
public String xxxxmethod(String someparam,ModelMap model){
//省略方法处理逻辑若干
//将数据放置到ModelMap对象model中,第二个参数可以是任何java类型
("key",someparam);
......
//返回跳转地址
return "path:handleok";}
<2>ModelAndView的实例是由用户手动创建的,这也是和ModelMap的一个区别
public ModelAndView xxxxmethod(String someparam){
//省略方法处理逻辑若干
//构建ModelAndView实例,并设置跳转地址
ModelAndView view = new ModelAndView("path:handleok");
//将数据放置到ModelAndView对象view中,第二个参数可以是任何java类型
("key",someparam);
......
//返回ModelAndView对象view
return view;}
4.使用Map、Model和ModelMap传递数据实例
(1)后台代码示例:
@RequestMapping("/test")
public String test(Map<String,Object> map,Model model,ModelMap modelMap){
("names", ("caoyc","zhh","cjx"));
("time", new Date());
("city", "ChengDu");
("gender", "male");
return "hello";}
(2)前台通过el表达式接受数据
model方式:time:${}
map方式:names:${ }
modelMap方式:city:${ }
modelMap方式:gender:${ }
5.总结
(1)@PathVariable、@RequestParam 、@RequestBody用来获取前台传过来的参数
(2)ModelAndView、Model、ModelMap用来返回提示信息给前台界面
<1>例如:操作成功后,返回提示信息:界面显示操作成功!
<2>使用较多的是Model、ModelMap