SpringMVC数据绑定

一、数据绑定的相关注解

  

  @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>
原文地址:https://www.cnblogs.com/television/p/8732488.html