91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

七、Spring MVC之ModelAttribute

發布時間:2020-06-18 17:19:14 來源:網絡 閱讀:12983 作者:艾斯的夢想 欄目:數據庫

    前面幾篇文章分別說了spring mvc如何傳參數到后臺,如何返回參數到前臺。今天來說一下,spring mvc的ModelAttribute注解,這個注解有什么作用,什么場景下使用?


    1、應用場景:數據更新。例如有一個實體User,其中有id、userName、age、email、createTime等屬性,createTime定義了用戶的創建時間,一般都是后臺自動獲取并賦值。除了id和createTime之外的User的其他屬性,都是可以編輯修改的,如下圖所示。

七、Spring MVC之ModelAttribute


而此時我們的后臺,一般會使用對象進行接收參數,如下所示:

@RequestMapping("/testModelAttribute")
public String testModelAttribute(User user){
    System.out.println(user);
    return "success";
}

測試代碼,設定user的默認值,可以看到后臺的輸出

User{userName='lxy', password='null', email='test@126.com', 
age=20, createTime=null, address=null}

,user對象只有userName、age、emai有值,其它的都是null:

<form action="/testModelAttribute/testModelAttribute" method="post">
    userName:<input type="text" name="userName" value="lxy"/> <br/>
    age:<input type="text" name="age" value="20"/> <br/>
    email:<input type="text" name="email" value="test@126.com"/> <br/>
    <input type="submit" value="submit" />
</form>


如果我們這個時候更新數據庫的話,就需要先查詢一下數據庫,讀出來之前user對象的值,然后把前臺傳遞過來的參數設置到user上,否則就會導致部分數據丟失。

另一種解決方案是在編輯之前,先把數據查詢出來,然后在頁面上使用隱藏域,把其它的值放在隱藏域中,然后使用在提交form表單的時候,把隱藏域的數據一并提交到后臺。


2、配合使用ModelAttribute注解,這里根據參數userName,模擬從數據庫中讀取數據

@ModelAttribute
public void getUserById(@RequestParam(value = "userName", required = false)
    String userName, Map<String, Object> map) {
    System.out.println("任何時候我都會被調用");
    if(userName != null) {
        //模擬讀取數據庫中的數據
        User user = new User();
        user.setUserName("lxy");
        user.setAge(18);
        user.setPassword("123456");
        user.setEmail("lxy@126.com");
        user.setCreateTime(new Date());
        map.put("user", user);
    }
}

此時,再次運行項目,可以看到后臺的輸出為:email和age是前臺傳遞過來的參數,而password和createTime都是從數據庫中讀取出來的數據,這就可以直接根據user實體,更新數據庫了。

User{userName='lxy', password='123456', email='test@126.com', age=20, 
createTime=Mon Mar 20 18:03:31 CST 2017, address=null}


3、注意,訪問controller中的任意的方法,都會調用被ModelAttribute注解的方法。所以說這個注解要慎用,在適用在注解之前,需要認真考慮是否真的合適。

@RequestMapping("/testRun")
public String testRun(){
    System.out.println("我就看看會不會調用ModelAttribute注解修飾的方法");
    return "success";
}

訪問上面的方法,可以看到下面的輸出,被ModelAttribute注解修飾的方法,會先于目標方法執行:

任何時候我都會被調用
我就看看會不會調用ModelAttribute注解修飾的方法


4、在目標方法的參數上使用ModelAttribute注解

上面我們看到在被ModelAttribute注解修飾的方法上,如果要想被取到值,在方法中必須要這樣設置,

User user = new User();
user.setUserName("lxy");
user.setAge(18);
user.setPassword("123456");
user.setEmail("lxy@126.com");
user.setCreateTime(new Date());
//如果設置的key為temp,則目標方法上必須要有相應的注解聲明,才能起到效果
map.put("temp", user);
@RequestMapping("/testModelAttribute2")
public String testModelAttribute2(@ModelAttribute("temp")User user){
    //這里的temp與被ModelAttribute注解修飾的方法的存放的key一致
    System.out.println(user);
    return "success";
}


項目源代碼:

https://git.oschina.net/acesdream/spring-mvc


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

曲松县| 蒙城县| 双峰县| 左云县| 贡山| 江川县| 新密市| 松滋市| 武强县| 新河县| 高平市| 田林县| 台湾省| 青神县| 镇沅| 淄博市| 彭泽县| 南陵县| 陕西省| 仙游县| 监利县| 洪雅县| 凤山市| 樟树市| 运城市| 唐海县| 新巴尔虎左旗| 石首市| 泗洪县| 天长市| 二连浩特市| 淮安市| 龙门县| 东兰县| 科技| 仙居县| 任丘市| 丰镇市| 平罗县| 绵竹市| 永康市|