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. mysql - 這條聯合sql語句哪里錯了2. webpack - vuejs+java前后臺分離實現及部署問題3. docker鏡像push報錯4. javascript - 微信h5發送圖文信息,部分設備點擊“發送”按鈕時沒反應,問題較難重現,如何能找到可能存在問題的點?5. 網站在移動的環境下手機,pc打不開6. php - TP5的登錄驗證問題7. mysql - 我的myeclipse一直連顯示數據庫連接失敗,不知道為什么8. javascript - echart+百度地圖9. javascript - 微信小程序picker為什么會變成兩行?10. linux pdo 安裝配置中 make 遇到問題,請大家指教!
