@ModelAttribute運(yùn)用詳解(轉(zhuǎn))

@ModelAttribute使用詳解
1.@ModelAttribute注釋方法
例子(1)惰许,(2),(3)類似史辙,被@ModelAttribute注釋的方法會(huì)在此controller每個(gè)方法執(zhí)行前被執(zhí)行汹买,因此對于一個(gè)controller映射多個(gè)URL的用法來說,要謹(jǐn)慎使用聊倔。

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

@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";  
        }  
    }

這個(gè)例子晦毙,在獲得請求/helloWorld 后,populateModel方法在helloWorld方法之前先被調(diào)用耙蔑,它把請求參數(shù)(/helloWorld?abc=text)加入到一個(gè)名為attributeName的model屬性中见妒,在它執(zhí)行后helloWorld被調(diào)用,返回視圖名helloWorld和model已由@ModelAttribute方法生產(chǎn)好了甸陌。例子中model屬性名稱和model屬性對象有model.addAttribute()實(shí)現(xiàn)徐鹤,不過前提是要在方法中加入一個(gè)Model類型的參數(shù)。
當(dāng)URL或者post中不包含次參數(shù)時(shí)邀层,會(huì)報(bào)錯(cuò)返敬,其實(shí)不需要這個(gè)方法,完全可以把請求的方法寫成寥院,這樣缺少此參數(shù)也不會(huì)出錯(cuò)

       @RequestMapping(value = "/helloWorld")  
        public String helloWorld(String abc) {  
           return "helloWorld";  
        }

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

   @ModelAttribute  
    public Account addAccount(@RequestParam String number) {  
       return accountManager.findAccount(number);  
    }  

這種情況劲赠,model屬性的名稱沒有指定,它由返回類型隱含表示秸谢,如這個(gè)方法返回Account類型凛澎,那么這個(gè)model屬性的名稱是account。
這個(gè)例子中model屬性名稱有返回對象類型隱含表示估蹄,model屬性對象就是方法的返回值塑煎。它無須要特定的參數(shù)。

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

   @Controller  
    public class HelloWorldController {  
  
        @ModelAttribute("attributeName")  
        public String addAccount(@RequestParam String abc) {  
           return abc;  
        }  
  
        @RequestMapping(value = "/helloWorld")  
        public String helloWorld() {  
           return "helloWorld";  
        }  
    }

這個(gè)例子中使用@ModelAttribute注釋的value屬性臭蚁,來指定model屬性的名稱最铁。model屬性對象就是方法的返回值讯赏。它無須要特定的參數(shù)。

(4)@ModelAttribute和@RequestMapping同時(shí)注釋一個(gè)方法

@Controller  
    public class HelloWorldController {  
  
        @RequestMapping(value = "/helloWorld.do")  
        @ModelAttribute("attributeName")  
        public String helloWorld() {  
           return "hi";  
        }  
    }

這時(shí)這個(gè)方法的返回值并不是表示一個(gè)視圖名稱冷尉,而是model屬性的值漱挎,視圖名稱由RequestToViewNameTranslator根據(jù)請求"/helloWorld.do"轉(zhuǎn)換為邏輯視圖helloWorld。
Model屬性名稱有@ModelAttribute(value=””)指定雀哨,相當(dāng)于在request中封裝了key=attributeName磕谅,value=hi。

2.@ModelAttribute注釋一個(gè)方法的參數(shù)
(1)從model中獲取

@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";  
        }  
    }

在這個(gè)例子里雾棺,@ModelAttribute("user") User user注釋方法參數(shù)膊夹,參數(shù)user的值來源于addAccount()方法中的model屬性。
此時(shí)如果方法體沒有標(biāo)注@SessionAttributes("user")捌浩,那么scope為request割疾,如果標(biāo)注了,那么scope為session

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

@Controller  
    public class HelloWorldController {  
  
        @RequestMapping(value = "/helloWorld")  
        public String helloWorld(@ModelAttribute User user) {  
           return "helloWorld";  
        }  
    }

注意這時(shí)候這個(gè)User類一定要有沒有參數(shù)的構(gòu)造函數(shù)拓诸。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末侵佃,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子奠支,更是在濱河造成了極大的恐慌馋辈,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,599評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件倍谜,死亡現(xiàn)場離奇詭異迈螟,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)尔崔,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,629評論 3 385
  • 文/潘曉璐 我一進(jìn)店門答毫,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人季春,你說我怎么就攤上這事洗搂。” “怎么了载弄?”我有些...
    開封第一講書人閱讀 158,084評論 0 348
  • 文/不壞的土叔 我叫張陵耘拇,是天一觀的道長。 經(jīng)常有香客問我宇攻,道長惫叛,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,708評論 1 284
  • 正文 為了忘掉前任逞刷,我火速辦了婚禮嘉涌,結(jié)果婚禮上妻熊,老公的妹妹穿的比我還像新娘。我一直安慰自己洛心,他們只是感情好固耘,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,813評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著词身,像睡著了一般厅目。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上法严,一...
    開封第一講書人閱讀 50,021評論 1 291
  • 那天损敷,我揣著相機(jī)與錄音,去河邊找鬼深啤。 笑死拗馒,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的溯街。 我是一名探鬼主播诱桂,決...
    沈念sama閱讀 39,120評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼呈昔!你這毒婦竟也來了挥等?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,866評論 0 268
  • 序言:老撾萬榮一對情侶失蹤堤尾,失蹤者是張志新(化名)和其女友劉穎肝劲,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體郭宝,經(jīng)...
    沈念sama閱讀 44,308評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡辞槐,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,633評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了粘室。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片榄檬。...
    茶點(diǎn)故事閱讀 38,768評論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖衔统,靈堂內(nèi)的尸體忽然破棺而出丙号,到底是詐尸還是另有隱情,我是刑警寧澤缰冤,帶...
    沈念sama閱讀 34,461評論 4 333
  • 正文 年R本政府宣布犬缨,位于F島的核電站,受9級特大地震影響棉浸,放射性物質(zhì)發(fā)生泄漏怀薛。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,094評論 3 317
  • 文/蒙蒙 一迷郑、第九天 我趴在偏房一處隱蔽的房頂上張望枝恋。 院中可真熱鬧创倔,春花似錦、人聲如沸焚碌。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,850評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽十电。三九已至知押,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間鹃骂,已是汗流浹背台盯。 一陣腳步聲響...
    開封第一講書人閱讀 32,082評論 1 267
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留畏线,地道東北人静盅。 一個(gè)月前我還...
    沈念sama閱讀 46,571評論 2 362
  • 正文 我出身青樓,卻偏偏與公主長得像寝殴,于是被迫代替她去往敵國和親蒿叠。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,666評論 2 350

推薦閱讀更多精彩內(nèi)容

  • Spring Web MVC Spring Web MVC 是包含在 Spring 框架中的 Web 框架蚣常,建立于...
    Hsinwong閱讀 22,366評論 1 92
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理市咽,服務(wù)發(fā)現(xiàn),斷路器史隆,智...
    卡卡羅2017閱讀 134,637評論 18 139
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法曼验,內(nèi)部類的語法泌射,繼承相關(guān)的語法,異常的語法鬓照,線程的語...
    子非魚_t_閱讀 31,602評論 18 399
  • 前言:由于在第一次面試中吃了暗虧熔酷,考到了SpringMVC的@RequestMapping和@ResponseBo...
    天譴殘魂閱讀 4,134評論 3 17
  • 當(dāng)我切斷了我們之間的所有信號,我甚至擔(dān)心你會(huì)不會(huì)因此受到傷害豺裆,結(jié)果拒秘,我哭了一天哭成了狗,而你卻甚至不知我的離去
    青石長巷閱讀 159評論 0 0