使用@ModelAttribute來獲取請求中的資料
阿新 • • 發佈:2020-11-22
@ModelAttribute註解用於將方法的引數或者方法的返回值繫結到指定的模型屬性上,並返回給web檢視。
在實際工作中,有些時候我們在修改資料的時候可能只需要修改其中幾個欄位,而不是全部的屬性欄位都獲取,那麼當提交屬性的時候,從form表單中獲取的資料就有可能只包含了部分屬性,此時再向資料庫更新的時候,肯定會丟失屬性,因為物件的封裝是springmvc自動幫我們new的,所以此時需要先將從資料庫獲取的物件儲存下來,當提交的時候不是new新的物件,而是在原來的物件上進行屬性覆蓋,此時就需要使用@ModelAttribute註解。
定義User bean物件:
package com.test.bean;public class User { private Integer id; private String name; private String password; private Integer age; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; }public void setName(String name) { this.name = name; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public Integer getAge() { return age; } public void setAge(Integer age) {this.age = age; } @Override public String toString() { return "User{" + "id=" + id + ", name='" + name + '\'' + ", password='" + password + '\'' + ", age=" + age + '}'; } }
定義控制器UserController:
package com.test.controller; import com.test.bean.User; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.RequestMapping; @Controller public class UserController { Object o1 = null; Object o2 = null; Object o3 = null; @RequestMapping("update") public String update(@ModelAttribute("user") User user,Model model){ System.out.println(user); o2 = model; //可以看到所有的model都是同一個物件 System.out.println(o1==o2); //可以看到儲存的user物件也是同一個 System.out.println(user == o3); return "output"; } @ModelAttribute public void MyModelAttribute(Model model){ o1 = model; User user = new User(); user.setId(1); user.setName("user01"); user.setAge(12); user.setPassword("123"); model.addAttribute("user",user); System.out.println("modelAttribute:"+user); o3 = user; } }
index.jsp:
<%-- Created by IntelliJ IDEA. User: root Date: 2020/3/11 Time: 13:45 To change this template use File | Settings | File Templates. --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>$Title$</title> </head> <body> <form action="update" method="post"> <input type="hidden" value="1" name="id"> 姓名:user01<br> 密碼:<input type="text" name="password"><br> 年齡:<input type="text" name="age"><br> <input type="submit" value="提交"> </form> </body> </html>
總結:
2、先看之前是否在model中設定過該屬性值,如果設定過就直接獲取
3、看@SessionAttributes註解標註類中的方法是否給session中賦值,如果有的話,也是直接獲取,沒有報異常