一SpringMVC實(shí)現(xiàn)與CRUD整合
表單的name要和屬性一致,這樣SpringMVC才可以完成自動封裝(將上傳的內(nèi)容封裝成一個對象),public String update(Product product){}表單里的name會對product中對應(yīng)的屬性進(jìn)行賦值

傳遞參數(shù)有兩種:1問號傳參:需要使用問號來拼接參數(shù),如果傳遞多個值,需要使用&來拼接,不會改變路徑級別
2路徑傳參:統(tǒng)配規(guī)則(傳什么就可以進(jìn)入什么頁面)@GetMapping("/{path}"),如果同時統(tǒng)配和具體的url(@GetMapping("/a"))都滿足,則以更精確的url來處理該請求。
可以直接指定變量的數(shù)據(jù)類型,而無需再做數(shù)據(jù)類型的轉(zhuǎn)換,也可以實(shí)現(xiàn)傳入多個參數(shù),/{abc}/{xyz},方法里面可以使用 public String deleteProduct(@PathVariable int abc,@PathVariable String xyz)方式來接收。注意路徑傳參會多一級目錄,要注意訪問路徑

箭頭內(nèi)容要一致
1????RequestMapping 可以通過method來區(qū)分不同的請求方式????
@RequestMapping(value = “/update”, method = RequestMethod.POST)代表處理post請求
@RequestMapping(value = “/update”, method = RequestMethod.GET)代表處理get請求
2? ?GETMapping,可以簡化代碼,專門用來處理get請求(4.3以后的Spring版本可用)
3? ?PostMapping,可以簡化代碼,專門用來處理post請求(4.3以后的Spring版本可用)可以與GetMapping的參數(shù)一樣,因?yàn)檎埱蠓绞讲灰粯?/p>
4? ?PathVariable路徑傳參的注解,可以實(shí)現(xiàn)路徑傳參。
二? ? MVC校驗(yàn)
1寫一個配置文件(前面的message可以變,但后面的zh_CN_properties是固定格式)properties內(nèi)容格式是key=value,我的idea如果把文件放在WEB-INF下會一直報(bào)錯,找不到文件,只能把文件放在resources;
messages_zh_CN_properties(中文)
messages_en_US_properties(英文)

2在mvc.xml文件中配置如下,id必須是messageSource,SpringMVC會根據(jù)id所對應(yīng)的bean對象來讀取配置文件
property內(nèi)的name必須是basename,用于讀取文件,因?yàn)槲野裵roperties配置文件放在resources;所以value是messages(文件名)

3實(shí)現(xiàn)Validator接口,實(shí)現(xiàn)里面的兩個方法supports(用來對于哪個類實(shí)現(xiàn)校驗(yàn))和validate(完成真正的校驗(yàn),一定是滿足了supports方法之后才會進(jìn)入該方法來進(jìn)行校驗(yàn)),validate有兩個參數(shù),前者是需要檢驗(yàn)的對象,后者是存儲的錯誤信息,
rejectValue("字段名",properties配置文件的key值)用于合法性檢驗(yàn),兩個參數(shù)
rejectIfEmpty(errors,"字段名",properties配置文件的key值),用于非空檢驗(yàn),三個參數(shù)

4? ? 書寫Controller類(校驗(yàn))
該類return的都代表最終的展示頁面,如果帶有redirect,則代表重定向
第一個GetMapping("/saveEmp")代表以get方式請求該資源,里面寫了一個ModelAndView對象,傳了三個參數(shù),第一個是viewname,視圖名,拼接上前后綴可以得到真正的物理視圖,來打開該物理視圖所對應(yīng)的頁面,第二個參數(shù)為modelname,模型名,相當(dāng)于給模型起名字,這里要注意,該模型名意識要被叫做bean對象的小寫形式Product(product),第三個參數(shù)為modelObject,模型對象,將該對象通過模型名傳遞給第一個參數(shù)viewname所對應(yīng)的頁面,在那個頁面中可以渲染該數(shù)據(jù)

modelName必須是bean對象的小寫,
commandName的值也必須與其一樣
第二個PostMapping("/saveEmp"),該注解的意思是頁面上的表單通過post請求將saveEmp的請求來在這里進(jìn)行處理。該方法包含有三個參數(shù),第一個是Product對象,可以自動封裝表單中的屬性為Bean對象,第二個參數(shù)為BindingResult對象,該對象我們通過源碼可以發(fā)現(xiàn)是Spring中的Errors的子接口,可以用來接收并存儲錯誤信息,這個對象可以接收從PorductValidate校驗(yàn)類中產(chǎn)生的錯誤信息,存儲以交給錯誤頁面的f:errors標(biāo)簽來展示錯誤信息,第三個參數(shù)是Model對象,可以用來儲存對象,目的是可以使的bean對象的錯誤數(shù)據(jù)進(jìn)行回顯

addAttribute的第一個參數(shù)必須是bean對象的小寫,commandName的值也必須與其一樣
5????書寫頁面
1????需要添加Spring MVC的form標(biāo)簽;5.0版本的spring沒有使用commandName了,用modelAttribute替代,commandName換成modelAttribute,其他的都不變,值依舊是bean對象的小寫;
1????f:input類似于html中的input標(biāo)簽,但是將name換成了path,代表的是屬性名
2????f:errors,這個標(biāo)簽可以用來展示如果當(dāng)前表單有錯誤信息時,可以在對應(yīng)的域之上進(jìn)行回顯,一般都被放在對應(yīng)的f:input標(biāo)簽之后,用來描述該屬性的錯誤信息