激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - SpringMVC中@ModelAttribute注解的使用教程

SpringMVC中@ModelAttribute注解的使用教程

2021-11-10 13:14leo3070 Java教程

在SpringMVC中,我們可以通過使用@ModelAttribute注解標記方法,實現類似于Struts2中Preparable攔截器的效果,這篇文章主要給大家介紹了關于SpringMVC中@ModelAttribute注解使用的相關資料,需要的朋友可以參考下

前言

@ModelAttribute最主要的作用是將數據添加到模型對象中,用于視圖頁面展示時使用。

@ModelAttribute等價于 model.addAttribute("attributeName", abc); 但是根據@ModelAttribute注釋的位置不同,和其他注解組合使用,致使含義有所不同。具體區別如下:

1.@ModelAttribute注釋方法

例子(1),(2),(3)類似,被@ModelAttribute注釋的方法會在此controller每個方法執行前被執行,因此對于一個controller映射多個URL的用法來說,要謹慎使用。

(1)@ModelAttribute注釋void返回值的方法

?
1
2
3
4
5
6
7
8
9
10
11
12
@Controller
public class HelloWorldController {
    @ModelAttribute
    public void populateModel(@RequestParam String abc, Model model) {
         model.addAttribute("attributeName", abc);
      }
 
    @RequestMapping(value = "/helloWorld")
    public String helloWorld() {
       return "helloWorld";
        }
 }

這個例子,在獲得請求/helloWorld 后,populateModel方法在helloWorld方法之前先被調用,它把請求參數(/helloWorld?abc=text)加入到一個名為attributeName的model屬性中,在它執行后 helloWorld被調用,返回視圖名helloWorld和model已由@ModelAttribute方法生產好了。

(2)@ModelAttribute注釋返回具體類的方法

?
1
2
3
4
@ModelAttribute
public Account addAccount(@RequestParam String number) {
    return accountManager.findAccount(number);
}

這種情況,model屬性的名稱沒有指定,它由返回類型隱含表示,如這個方法返回Account類型,那么這個model屬性的名稱是account。

這個例子中model屬性名稱有返回對象類型隱含表示,model屬性對象就是方法的返回值。它無須要特定的參數。

(3)@ModelAttribute(value="")注釋返回具體類的方法

?
1
2
3
4
5
6
7
8
9
10
11
12
@Controller
public class HelloWorldController {
    @ModelAttribute("attributeName")
    public String addAccount(@RequestParam String abc) {
        return abc;
      }
 
    @RequestMapping(value = "/helloWorld")
    public String helloWorld() {
        return "helloWorld";
          }
   }

這個例子中使用@ModelAttribute注釋的value屬性,來指定model屬性的名稱。model屬性對象就是方法的返回值。它無須要特定的參數。

(4)@ModelAttribute和@RequestMapping同時注釋一個方法

?
1
2
3
4
5
6
7
8
@Controller
public class HelloWorldController {
    @RequestMapping(value = "/helloWorld.do")
    @ModelAttribute("attributeName")
    public String helloWorld() {
         return "hi";
      }
  }

這時這個方法的返回值并不是表示一個視圖名稱,而是model屬性的值,視圖名稱由RequestToViewNameTranslator根據請求"/helloWorld.do"轉換為邏輯視圖helloWorld。

Model屬性名稱有@ModelAttribute(value=””)指定,相當于在request中封裝了key=attributeName,value=hi。

2.@ModelAttribute注釋一個方法的參數

(1)從model中獲取

?
1
2
3
4
5
6
7
8
9
10
11
12
13
@Controller
public class HelloWorldController {
    @ModelAttribute("user")
    public User addAccount() {
        return new User("jz","123");
     }
 
    @RequestMapping(value = "/helloWorld")
    public String helloWorld(@ModelAttribute("user") User user) {
           user.setUserName("jizhou");
           return "helloWorld";
        }
  }

在這個例子里,@ModelAttribute("user") User user注釋方法參數,參數user的值來源于addAccount()方法中的model屬性。

此時如果方法體沒有標注@SessionAttributes("user"),那么scope為request,如果標注了,那么scope為session

(2)從Form表單或URL參數中獲取(實際上,不做此注釋也能拿到user對象)

?
1
2
3
4
5
6
7
@Controller
public class HelloWorldController {
    @RequestMapping(value = "/helloWorld")
    public String helloWorld(@ModelAttribute User user) {
        return "helloWorld";
     }
}

它的作用是將該綁定的命令對象以“user”為名稱添加到模型對象中供視圖頁面展示使用。我們此時可以在視圖頁面使用${user.username}來獲取綁定的命令對象的屬性。

3.@ModelAttribute注釋一個方法的返回值

放在方法的返回值之前,添加方法返回值到模型對象中,用于視圖頁面展示時使用。

?
1
2
3
4
5
6
7
8
@Controller
public class HelloWorldController {
 
    @RequestMapping(value = "/helloWorld")
    public @@ModelAttribute("user2") User helloWorld(@ModelAttribute User user) {
        return new User();
     }
}

大家可以看到返回值類型是對象類型,而且通過 @ModelAttribute("user2") 注解,此時會添加返回值到模型數據( 名字為user2 ) 中供視圖展示使用

@ModelAttribute  注解的返回值會覆蓋 @RequestMapping  注解方法中的 @ModelAttribute  注解的同名命令對象

總結

到此這篇關于SpringMVC中@ModelAttribute注解使用的文章就介紹到這了,更多相關@ModelAttribute注解使用內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!

原文鏈接:https://blog.csdn.net/leo3070/article/details/81046383

延伸 · 閱讀

精彩推薦
  • Java教程Java實現搶紅包功能

    Java實現搶紅包功能

    這篇文章主要為大家詳細介紹了Java實現搶紅包功能,采用多線程模擬多人同時搶紅包,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙...

    littleschemer13532021-05-16
  • Java教程xml與Java對象的轉換詳解

    xml與Java對象的轉換詳解

    這篇文章主要介紹了xml與Java對象的轉換詳解的相關資料,需要的朋友可以參考下...

    Java教程網2942020-09-17
  • Java教程20個非常實用的Java程序代碼片段

    20個非常實用的Java程序代碼片段

    這篇文章主要為大家分享了20個非常實用的Java程序片段,對java開發項目有所幫助,感興趣的小伙伴們可以參考一下 ...

    lijiao5352020-04-06
  • Java教程Java BufferWriter寫文件寫不進去或缺失數據的解決

    Java BufferWriter寫文件寫不進去或缺失數據的解決

    這篇文章主要介紹了Java BufferWriter寫文件寫不進去或缺失數據的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望...

    spcoder14552021-10-18
  • Java教程Java8中Stream使用的一個注意事項

    Java8中Stream使用的一個注意事項

    最近在工作中發現了對于集合操作轉換的神器,java8新特性 stream,但在使用中遇到了一個非常重要的注意點,所以這篇文章主要給大家介紹了關于Java8中S...

    阿杜7482021-02-04
  • Java教程Java使用SAX解析xml的示例

    Java使用SAX解析xml的示例

    這篇文章主要介紹了Java使用SAX解析xml的示例,幫助大家更好的理解和學習使用Java,感興趣的朋友可以了解下...

    大行者10067412021-08-30
  • Java教程升級IDEA后Lombok不能使用的解決方法

    升級IDEA后Lombok不能使用的解決方法

    最近看到提示IDEA提示升級,尋思已經有好久沒有升過級了。升級完畢重啟之后,突然發現好多錯誤,本文就來介紹一下如何解決,感興趣的可以了解一下...

    程序猿DD9332021-10-08
  • Java教程小米推送Java代碼

    小米推送Java代碼

    今天小編就為大家分享一篇關于小米推送Java代碼,小編覺得內容挺不錯的,現在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧...

    富貴穩中求8032021-07-12
主站蜘蛛池模板: 色戒在线版 | 成人精品久久 | 久久影院在线观看 | 日本精品久久久一区二区三区 | 91香蕉影视 | 91一区二区在线观看 | 天天干干 | 中文字幕在线永久 | 黄色av片三级三级三级免费看 | 久久久成人一区二区免费影院 | 香蕉黄色网 | 国产免费看 | 国产欧美精品综合一区 | 98国内自拍在线视频 | 午夜视频在线免费观看 | 国产在线欧美 | 女人叉开腿让男人桶 | 欧美中文字幕在线视频 | 一级毛片免费电影 | 久久久午夜电影 | 成年人免费视频播放 | av中文在线观看 | videos高潮 | 一区二区三区日韩视频在线观看 | 色就色 综合偷拍区91网 | av在线高清观看 | 蜜桃视频在线播放 | 澳门一级淫片免费视频 | 日本一区二区三区精品 | 一级做a爱片性色毛片高清 日本一区二区在线看 | 亚洲生活片| www.777含羞草 | www久| 在线 日本 制服 中文 欧美 | 羞羞视频2023| av在线免费播放网站 | 日韩av电影在线免费观看 | 99精品国产在热久久婷婷 | 亚洲一区二区三区高清 | 成人毛片免费播放 | 大奶一级片 |