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對象而Spring官方的教程中在Spitter前面多了一個@ModelAttribute注解,但是在這個例子里面產(chǎn)生的效果和不加似乎是一樣的,都能夠綁定表單信息到對象中,所以想問下這個注解的功能?在這個例子中是不是即使不顯示寫也能有一樣的功能?
問題解答
回答1:不是的,@ModelAttribute有兩個作用,一個是取出數(shù)據(jù),也就是將數(shù)據(jù)從請求中取出來封裝到controller方法的參數(shù)中一個是將這個數(shù)據(jù)放置到Model中,這樣你就可以在jsp頁面中使用EL表達(dá)式取出數(shù)據(jù)并顯示
回答2:如果在參數(shù)上加了@ModelAttribute 注解,再執(zhí)行@RequestMapping之前會先找到@ModelAttribute中的key,如果沒有@ModelAttribute ,如何沒有或者沒有獲取到則會通過反射實(shí)例化一個spitter對象,再通過request拿到你set到對象里面的值。雖然結(jié)果是一樣的,但是走的流程不一樣。
回答3:雖然有它自己特點(diǎn),但是用了這么久,都沒用上過,我覺得可以忽略 @ModelAttribute
相關(guān)文章:
1. 怎么php怎么通過數(shù)組顯示sql查詢結(jié)果呢,查詢結(jié)果有多條,如圖。2. 求大神支招,php怎么操作在一個html文件的<head>標(biāo)記內(nèi)添加內(nèi)容?3. php - 數(shù)據(jù)庫表如果是null怎么替換為其他字段的值4. mysql - 數(shù)據(jù)庫建字段,默認(rèn)值空和empty string有什么區(qū)別 1105. 致命錯誤: Class ’appfacadeTest’ not found6. mysql - JAVA怎么實(shí)現(xiàn)一個DAO同時實(shí)現(xiàn)查詢兩個實(shí)體類的結(jié)果集7. javascript - mysql插入數(shù)據(jù)時怎樣避免與庫中的數(shù)據(jù)重復(fù)?8. mysql建表報錯,查手冊看不懂,求解?9. shell - Update query wrong in MySQL10. sql語句 - 如何在mysql中批量添加用戶?
