java - SpringMVC中的@ModelAttribute注解是可有可無的嗎?
問題描述
在學(xué)習(xí)SpringMVC中的使用Controller接受表單的值,按照《Spring實(shí)戰(zhàn)》中的代碼,Controller如下:
@RequestMapping(value = '/register', method = POST) public String processRegistration(Spitter spitter) {System.out.println(spitter.getUsername());spitterRepository.save(spitter);return 'redirect:/spitter/' + spitter.getUsername(); }
打印那行是我自己加的,用來驗(yàn)證表單的值是否綁定到了Spitter對(duì)象而Spring官方的教程中在Spitter前面多了一個(gè)@ModelAttribute注解,但是在這個(gè)例子里面產(chǎn)生的效果和不加似乎是一樣的,都能夠綁定表單信息到對(duì)象中,所以想問下這個(gè)注解的功能?在這個(gè)例子中是不是即使不顯示寫也能有一樣的功能?
問題解答
回答1:不是的,@ModelAttribute有兩個(gè)作用,一個(gè)是取出數(shù)據(jù),也就是將數(shù)據(jù)從請(qǐng)求中取出來封裝到controller方法的參數(shù)中一個(gè)是將這個(gè)數(shù)據(jù)放置到Model中,這樣你就可以在jsp頁(yè)面中使用EL表達(dá)式取出數(shù)據(jù)并顯示
回答2:如果在參數(shù)上加了@ModelAttribute 注解,再執(zhí)行@RequestMapping之前會(huì)先找到@ModelAttribute中的key,如果沒有@ModelAttribute ,如何沒有或者沒有獲取到則會(huì)通過反射實(shí)例化一個(gè)spitter對(duì)象,再通過request拿到你set到對(duì)象里面的值。雖然結(jié)果是一樣的,但是走的流程不一樣。
回答3:雖然有它自己特點(diǎn),但是用了這么久,都沒用上過,我覺得可以忽略 @ModelAttribute
相關(guān)文章:
1. mysql 查詢身份證號(hào)字段值有效的數(shù)據(jù)2. python bottle跑起來以后,定時(shí)執(zhí)行的任務(wù)為什么每次都重復(fù)(多)執(zhí)行一次?3. 視頻文件不能播放,怎么辦?4. html5 - HTML代碼中的文字亂碼是怎么回事?5. python - 爬蟲模擬登錄后,爬取csdn后臺(tái)文章列表遇到的問題6. visual-studio - Python OpenCV: 奇怪的自動(dòng)補(bǔ)全問題7. mysql - 分庫(kù)分表、分區(qū)、讀寫分離 這些都是用在什么場(chǎng)景下 ,會(huì)帶來哪些效率或者其他方面的好處8. javascript - 彈出一個(gè)子窗口,操作之后關(guān)閉,主窗口會(huì)得到相應(yīng)的響應(yīng),例如網(wǎng)站的某些登錄界面,django后臺(tái)的管理等,這是怎么實(shí)現(xiàn)的呢?9. javascript - ios返回不執(zhí)行js怎么解決?10. android - 分享到微信,如何快速轉(zhuǎn)換成字節(jié)數(shù)組
