Shopping Without Vision 的 project 終於告一段落,teamwork 非常給力,中間也遇到很多困難,還好都一起克服了。這是做的第二個 Spring MVC 項目了,對這個框架在很多細節上又多了些深入的理解。這篇文章想總結一下關於 controller 中我們用到的幾個註解。
@Controller
Controller 是 MVC 中的 C —— 控制層,如果不基於註解,該類需要繼承 CommandController,如果基於註解,只需要在類名前加上註解 @Controller,這樣當服務器啓動時,spring 會自動掃描所有包,掃描到帶有這個註解的類,spring 會告訴服務器,這是一個 controller,它可以接收和處理來自用戶的請求。
@RequestMapping
假設請求的 URL 是: http://localhost:8080/項目名/xxx,這時在所有的 controller 中,根據 “xxx” 尋找處理請求的方法。所以我們只需要在用作 controller 的類裏面可以處理請求的對應方法前加上註釋,例如:
@RequestMapping(value = "/add", method = RequestMethod.GET)
public String addProduct(Model model) {
Product product = new Product();
List<Category> categories = categoryService.getCurrent();
model.addAttribute("categories", categories);
model.addAttribute("product", product);
return "addProduct";
}
方法最後 return 的字符串,就是對應的 view 頁面。
@ModelAttribute
該註解有兩種用法,一種是註釋方法,另一種是註釋參數,我們用在第二種情況,示例代碼:
@RequestMapping(value="/adding",method=RequestMethod.POST)
publicStringaddingProduct(@Valid@ModelAttribute("product")Productproduct,
HttpServletRequestrequest,Modelmodel){
System.out.println(product.getCategory().getCid());
System.out.println("product is"+product);
productDaoImp.insert(product);
List<Product>plist=productDaoImp.getProducts();
model.addAttribute("plist",plist);
List<Category>categories=categoryService.getCurrent();
model.addAttribute("categories",categories);
return"products";
}
@ModelAttribue 前的 @Valid 用來進行數據的校驗。由於此處沒有用到 @SessionAttributes,所以 product 的 scope 爲 request,否則就是 session。在這個例子裏,@ ModelAttribute (“product”) Product product 的作用是將綁定的命令對象以 “product” 爲名稱,又將 “plist” 和 “categories” 添加到模型對象中,供視圖頁面 (view) 展示使用。我們可以在視圖頁面使用 {plist.xxx} 和 ${categories.xxx} 來獲取綁定的命令對象的屬性。
@PathVariable
如果請求路徑上有 id 變量值,可以通過 @PathVariable 來獲取,如:
@RequestMapping(value="/{productId}/delete",method=RequestMethod.GET)
publicStringdeleting(@PathVariableintproductId,HttpServletRequestrequest,Modelmodel){
Productproduct=productDaoImp.findById(productId);
productDaoImp.delete(product);
List<Product>plist=productDaoImp.getProducts();
model.addAttribute("plist",plist);
List<Category>categories=categoryService.getCurrent();
model.addAttribute("categories",categories);
return"products";
}
歡迎關注我的知乎專欄【數據池塘】,專注於分享機器學習、數據挖掘乾貨:https://zhuanlan.zhihu.com/datapool
⬇️ 微信公衆號 ⬇️