接收数据和数据绑定
代码优化 (简化)
@RequestMapping(value="show1")
public String test17(Model model){
model.addAttribute("msg", "优化后的代码");//添加数据
return "hello";//springmvc默认将返回值最为视图名称
}
接收servlet的内置对象
这些对象的接收非常简单,只需要在方法形参中有该对象就能接收,不需要任何配置
@RequestMapping(value="show17")
public String test17(Model model,HttpServletRequest request,HttpServletResponse response,HttpSession session){
业务逻辑以及响应
}
接收请求路径中的占位符
@PathVariable(value=”id”)获取占位符中的参数
@RequestMapping(value="show18/{name}/{id}")
public String test18(Model model,@PathVariable()String name,@PathVariable()String id){
model.addAttribute("msg", "接收到的参数为:"+name+"..."+id);
return "hello";
}
注意:注解中的(value=”id”)可以省略,但是千万不要省。
接收普通的请求参数
@RequestParam(value=””, required=true/false, defaultValue=””)
1.value:参数名
2.required:是否必须,默认为true,标示请求参数中必须包含该参数,如果不包含则抛出异常
3.defaultValue:默认参数值,如果设置了该值,required=true将失效(即使手动设置了也会失效),自动为false,如果请求中不包含该参数则使用默认值。
@RequestMapping(value = "show")
public String test13(Model model,
@RequestParam(value = "username", required = true, defaultValue = "lx") String username,
@RequestParam(value = "name", required = false) String name, @RequestParam("id") Long id) {
model.addAttribute("msg", "使用@RequestParam接收到的数据为:" + username + "-----" + name + "-----" + id);
return "hello";
}
请求url: http://localhost:8080/hello/show.do?id=110
控制台输出为: 使用@RequestParam接收到的数据为:lx-----null-----110
获取cookie
@RequestMapping(value = "show22")
public String test22(Model model, @CookieValue("JSESSIONID")String jsessionid) {
model.addAttribute("msg", "jsessionid:" + jsessionid);
return "hello";
}
注意@CookieValue(“JSESSIONID”)必须大写
此时当cookie中没有该属性时,可以在defaultValue属性中设置一个默认值:defaultValue=”101”
pojo对象的绑定
SpringMVC会将请求参数名和POJO实体中的属性名(set方法)进行自动匹配,如果名称一致,将把值填充到对象属性中,并且支持级联(例如:user.dept.id)。
当自动讲数据封装到User对象中之后,如果还想单独获取某个或几个参数,可以单独设置形参获取。
@RequestMapping(value="show24")
public String test24(Model model,User user,@RequestParam(value="name")String name) {
model.addAttribute("msg","打印参数:"+user+"..."+name);
return "hello";
}
集合的绑定
集合元素为pojo类型
如果List中封装的是pojo对象,不能够直接在方法中形参中使用List,需要将List对象包装到一个类中才能绑定
要求:提交请求的表单中input标签的name属性的值和集合中元素的属性名一致。
1、创建一个UserVO包装List集合
public class UserVO {
private List<User> users;
get和set方法 重写toString方法
}
2、Controller方法:
@RequestMapping(value="show")
public String test25(Model model,UserVO userVO) {
model.addAttribute("msg","打印参数:"+userVO.toString());
return "hello";
}
3、将表单input标签中的name属性值加上user[角标](从0开始每个User对象使用一个角标)
集合中元素为基本类型
直接用@RequestMapping注解接收