您的位置:首页 > 编程语言 > Java开发

SpringMVC数据绑定

2018-04-07 10:15 507 查看

一、数据绑定的相关注解

  

@RequestMapping(value = "/ok1",method = {RequestMethod.GET})
public String ok1(User user){
System.out.println(user.getUsername());
System.out.println(user.getPwd());
return "success";
}

最基本的传值方法。

 

二、Spring Web MVC提供Model、Map或ModelMap让我们能去暴露渲染视图需要的模型数据。虽然此处注入的是三个不同的类型(Model model,Map model2,ModelMap model3),但是三者是同一个对象。

@RequestMapping(value = "/ok2")
public String ok2(User user, Map map,ModelMap mm,Model m){
// map.put("username",user.getUsername()+"˧");
// mm.addAttribute("username",user.getUsername()+"˧");
m.addAttribute("username",user.getUsername()+"˧");
return "success";
}

 

三、@RequestParam

   绑定单个请求参数值,@RequestParam用于将请求参数区数据映射到功能处理方法的参数上。如以下代码:

public String requestparam(@RequestParam String username)

请求中包含username参数(如/requestparam?username=zhang),则自动传入。

@RequestMapping(value = "/ok3")
public String ok3(@RequestParam String username,@RequestParam String pwd){
System.out.println(username);
System.out.println(pwd);
return "success";
}

也可以在里面加上参数value:

@RequestMapping(value = "/ok4")
public String ok4(@RequestParam(value = "user") String username){
System.out.println(username);
return "success";
}
<a href="/his/ok4?user=weikun">ok4</a>

前端的名字必须为user。

  也可以传入一个列表或者是一个数组

<a href="/his/ok5?user=weikun&user=mike">ok5</a>
<a href="/his/ok6?user=weikun&user=mike">ok6</a>
@RequestMapping(value = "/ok5")
public String ok5(@RequestParam(value = "user") String[] users){
System.out.println(users[0]);
System.out.println(users[1]);
return "success";
}
@RequestMapping(value = "/ok6")
public String ok6(@RequestParam(value = "user") List users){
System.out.println(users.get(0));
System.out.println(users.get(1));
return "success";
}

 

四、@CookieValue

   @Cookievalue用于将请求的Cookie数据映射到功能处理方法的参数上。

public String test(@CookieValue(value="JSESSIONID",defaultValue="")String sessionID){}

  如上配置将会自动将JSESSIONID值传入到sessionId参数上,defaultValue表示Cookie中没有JSESSIONID时默认为空。

  实例:

<body>
COOKIE:${cookie.hit.value}
</body>

${}这种传值方法是JSP的EL表达式。

@RequestMapping(value = "/ok7")
public String ok7(
@CookieValue(value="hitCounter", defaultValue = "8") Long hit, HttpServletResponse response){
Cookie cookie=new Cookie("hit",new Long(++hit).toString());
response.addCookie(cookie);
return "success";
}

将hitCounter传入到hit参数上,然后利用传入的response将cookie加到返回的页面上。

 

五、@ModelAttribute

    绑定请求参数到命令对象

    @ModelAttribute一共具有如下三个作用:

      1、绑定请求参数到命令对象:放在功能处理方法的入参时,用于将多个请求参数绑定到一个命令对象,从而简化绑定流程,而且自动暴露为模型数据用于视图页面展示时使用;

      2、暴露表单引用对象为模型数据:放在处理器的一般方法(非功能处理方法)上时,是为表单准备要展示的表单引用对象,如注册时需要选择的城市等,而且在执行功能处理方法(@RequestMapping注解的方法)之前,自动添加到模型对象中,用于视图页面展示时使用;

      3、暴露@RequestMapping方法返回值为模型数据:放在功能处理方法的返回值上时,是暴露功能处理方法的返回值为模型数据,用于视图页面展示时使用。

    绑定请求参数到命令对象如用户登录,我们需要捕获用户登录的请求参数(用户名、密码)并封装为用户对象,此时我们可以使用@ModelAttribute绑定多个请求参数到我们的命令对象。

public String test(@ModelAttribute("user") User user)
public String ok1(@ModelAttribute("user1") User user){
System.out.println(user.getUsername());
System.out.println(user.getPwd());
return "success";
}

  上面的是参数中加上@ModelAttribute注解。还可以用到返回值中,但是,加到返回值中的时候,原来要返回的页面名称就不会返回了,这时,我们可以在视图层创建一个对应的jsp文件,将会自动转到这个页面。

@RequestMapping(value="/ok2")
public @ModelAttribute("user1") User ok2(User user,Map map){
System.out.println(map.containsKey("user"));
user.setUsername(user.getUsername()+"帅");
return user;
}

ok2.jsp:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>${user.username}</h1>
</body>
</html>

返回列表的形式:

@RequestMapping(value="/ok3")
public @ModelAttribute List<String> ok3(){
return Arrays.asList("北京","上海","杭州");
}

返回键值对即hashmap:

@RequestMapping(value="/ok5")
public @ModelAttribute Map<String,User> ok5(){
Map<String,User> map=new HashMap();
map.put("A",new User("Mike","119"));
map.put("B",new User("Rose","888"));
return map;
}

 

六、@SessionAttribus

  @SessionAttributes绑定命令对象到session

   有时候我们需要在多次请求之间保持数据,一般情况需要我们明确的调用HttpSession的API来存取会话数据,如多步骤提交的表单。在控制器类前就要加上@SessionAttribute注解

@SessionAttributes(value = {"username","pwd"})

方法为:

@RequestMapping(value="/ok7")
public void ok7(){

}

jsp为:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
${sessionScope.username}
</body>
</html>

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: