ModelAttribute註解要應對的主要問題是:當你想要更新某個實體類在數據庫裏的數據時,有一些數據是不想要更改的,好比你並不想修改ID,可是SpringMVC自動封裝POJO類時,沒有帶值的會封裝成NULL,所以Dao的SQL語句更新數據時,你數據庫裏的ID也變成null了
HTML5java
<form action="${address}/update" method="POST"> 編碼: <input type="hidden" name="id" value="1"> 用戶名: <input type="text" name="username"> 密碼: <input type="password" name="password"> <input type="submit" value="提交"> </form>
java代碼數據庫
@RequestMapping("/update") public int update(User user) { int result=UserDao.update(user); //該user的ID是空的,會致使數據庫裏的id也是空的 System.out.println(user); System.out.println(result); if(result==1){ return "success"; }else{ return "error"; } } 結果:null,小王,123456
1.在方法上註解ModelAttribute,則Spring MVC在調用處理器時會先查看是否有ModelAttribute註解,先執行ModelAttribute註解下的代碼。
2.在方法入參上使用ModelAttribute,會從隱含對象中獲取存儲在內的數據。app
//參數中的ModelAttribute告訴該方法,不須要再建立一個user對象了,這裏的user是數據庫和頁面數據的整合版 @RequestMapping("/update") public String update( Map<String, Object> model,HttpServletRequest request, @ModelAttribute("user")User user){ System.out.println("用戶信息:"+user); return "success"; } 結果: 1,小王,123456 //提早往隱含對象中存儲數據 @ModelAttribute public void ModelAttributeTest(@RequestParam(value="id") Integer id,Map<String, Object> map,){ User user =UserDao.getuser(id); System._out_.println("數據庫裏的user:"+user); map.put("user", user); } }