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. javascript - 原生JS和jQuety關于設置圖片輪播定時器問題2. mysql - 在下剛入門sql 關于sql的語法詢問3. 請問寫好python模塊以后,文檔怎么寫?4. html5 - 最近在自學react 求一個react表單提交的例子5. java - 新人有一個問題想問問大家,weex怎么動態修改控件高度6. javascript - jq 上傳圖片成功后添加一個新的上傳框時出現問題7. 老師您好!我有一個問題、8. angular.js - 在終端中用yeoman啟用angular-generator報錯,求解?9. 我和老師的代碼對照了幾遍沒發現問題,但是瀏覽器打開就有問題了,求解10. javascript - uc、qq、搜狗 以上三個手機瀏覽器判斷移動端的js代碼不執行
