天天看點

SpringMVC-ModelAttribute注解

使用說明

  • 作用: 該注解是 SpringMVC4.3 版本以後新加入的。它可以用于修飾方法和參 數。 出現在方法上,表示目前方法會在控制器的方法執行之前,先執行。它可 以修飾沒有傳回值的方法,也可以修飾有具體傳回值的方法。出現在參數上, 擷取指定的資料給參數指派。
  • 屬性: value:用于擷取資料的 key。key 可以是 POJO 的屬性名稱,也可以是 map 結構的 key。
  • 應用場景: 當表單送出資料不是完整的實體類資料時,保證沒有送出資料的字 段使用資料庫對象原來的資料。
  • 例如: 我們在編輯一個使用者時,使用者有一個建立資訊字段,該字段的值是不允 許被修改的。在送出表單資料是肯定沒有此字段的内容,一旦更新會把該字段 内容置為 null,此時就可以使用此注解解決問題。

使用示例1

基于 POJO 屬性的基本使用(ModelAttribute 修飾方法帶傳回值) :模拟前端不傳密碼時,采用資料庫原來的密碼

jps 代碼

<!-- 修改使用者資訊 -->
<form action="account/updateUser" method="post">
    <input type="hidden" name="id" value="2">
    使用者名稱:<input type="text" name="username" ><br/>
    使用者年齡:<input type="text" name="age" ><br/>
    <input type="submit" value="儲存">
</form>
           

控制器代碼:

@ModelAttribute("user")
    //此參數必須是具體id,不能從user對象中擷取
    public User showModel(String id) {
        //模拟去資料庫查詢
        User user1 = findUserById(id);
        System.out.println("執行了 showModel 方法"+user1);
        return user1;
    }

    private User findUserById(String id) {
        User user = new User();
        user.setId(id);
        user.setUsername("林浩");
        user.setAge(19);
        user.setPassword("123456");
        return user;
    }

    @RequestMapping("/updateUser")
    public String updateUser111(@ModelAttribute("user") User user) {
        System.out.println("控制器中處理請求的方法:修改使用者:" + user);
        return "success";
    }
           

運作結果

SpringMVC-ModelAttribute注解

使用示例2

基于 Map 的應用場景(ModelAttribute 修飾方法不帶傳回值):模拟前端不傳密碼時,采用資料庫原來的密碼

jsp與前面一樣

<!-- 修改使用者資訊 -->
<form action="account/updateUser" method="post">
    <input type="hidden" name="id" value="2">
    使用者名稱:<input type="text" name="username" ><br/>
    使用者年齡:<input type="text" name="age" ><br/>
    <input type="submit" value="儲存">
</form>
           

控制器代碼

@ModelAttribute("user")
    public void showModel(String id, Map<String,User> map) {
        //模拟去資料庫查詢
        User user1 = findUserById(id);
        System.out.println("執行了 showModel 方法"+user1);
        map.put("user",user1);
    }

    private User findUserById(String id) {
        User user = new User();
        user.setId(id);
        user.setUsername("林浩");
        user.setAge(19);
        user.setPassword("123456");
        return user;
    }

    @RequestMapping("/updateUser")
    public String updateUser111(@ModelAttribute("user") User user) {
        System.out.println("控制器中處理請求的方法:修改使用者:" + user);
        return "success";
    }
           

運作結果

SpringMVC-ModelAttribute注解

繼續閱讀