java - SpringMVC中的@ModelAttribute注解是可有可無的嗎?
問題描述
在學習SpringMVC中的使用Controller接受表單的值,按照《Spring實戰》中的代碼,Controller如下:
@RequestMapping(value = '/register', method = POST) public String processRegistration(Spitter spitter) {System.out.println(spitter.getUsername());spitterRepository.save(spitter);return 'redirect:/spitter/' + spitter.getUsername(); }
打印那行是我自己加的,用來驗證表單的值是否綁定到了Spitter對象而Spring官方的教程中在Spitter前面多了一個@ModelAttribute注解,但是在這個例子里面產生的效果和不加似乎是一樣的,都能夠綁定表單信息到對象中,所以想問下這個注解的功能?在這個例子中是不是即使不顯示寫也能有一樣的功能?
問題解答
回答1:不是的,@ModelAttribute有兩個作用,一個是取出數據,也就是將數據從請求中取出來封裝到controller方法的參數中一個是將這個數據放置到Model中,這樣你就可以在jsp頁面中使用EL表達式取出數據并顯示
回答2:如果在參數上加了@ModelAttribute 注解,再執行@RequestMapping之前會先找到@ModelAttribute中的key,如果沒有@ModelAttribute ,如何沒有或者沒有獲取到則會通過反射實例化一個spitter對象,再通過request拿到你set到對象里面的值。雖然結果是一樣的,但是走的流程不一樣。
回答3:雖然有它自己特點,但是用了這么久,都沒用上過,我覺得可以忽略 @ModelAttribute
相關文章:
1. 關于docker下的nginx壓力測試2. javascript - webpack熱加載配置不生效3. debian - docker依賴的aufs-tools源碼哪里可以找到啊?4. 為什么我ping不通我的docker容器呢???5. angular.js - angular內容過長展開收起效果6. php - 一個操作請求多個服務如何保證數據的安全?7. javascript - js代碼獲取驗證碼倒計時問題8. 主從備份 - 跪求mysql 高可用主從方案9. docker start -a dockername 老是卡住,什么情況?10. dockerfile - [docker build image失敗- npm install]
