本文主要介紹注解開發的簡單參數綁定,包括簡單類型、簡單pojo以及自定義綁定實現類型轉換
從客戶端請求key/value數據,經過參數綁定,將key/value數據綁定到controller方法的形參上。
springmvc中,接收頁面提交的數據是通過方法形參來接收。而不是在controller類定義成員變更接收!!!!
直接在controller方法形參上定義下邊類型的對象,就可以使用這些對象。在參數綁定過程中,如果遇到下邊類型直接進行綁定。
HttpServletRequest
:通過request對象獲取請求信息 HttpServletResponse
:通過response處理響應信息 HttpSession
:通過session對象得到session中存放的對象 Model/ModelMap
:model是一個接口,modelMap是一個接口實現。作用:將model數據填充到request域。
通過@RequestParam
對簡單類型的參數進行綁定。如果不使用@RequestParam
,要求request傳入參數名稱和controller方法的形參名稱一致,方可綁定成功。
如果使用@RequestParam
,不用限制request傳入參數名稱和controller方法的形參名稱一致。
通過required屬性指定參數是否必須要傳入,如果設置為true,沒有傳入參數,報下邊錯誤:
@RequestMapping(value="/editItems",method={RequestMethod.POST,RequestMethod.GET})
[email protected]裡邊指定request傳入參數名稱和形參進行綁定。
//通過required屬性指定參數是否必須要傳入
//通過defaultValue可以設置默認值,如果id參數沒有傳入,將默認值和形參綁定。
public String editItems(Model model,@RequestParam(value="id",required=true) Integer items_id)throws Exception {
頁面中input的name和controller的pojo形參中的屬性名稱一致,將頁面中數據綁定到pojo。
注意:這裡只是要求name和形參的屬性名一致,而不是要求和形參的名稱一致,這點不要混淆了,框架會進入形參內部自動匹配pojo類的屬性名。(我沒看源碼,但應該是用反射實現的)
頁面定義:
controller的pojo形參的定義:
public class Items {
private Integer id;
private String name;
private Float price;
private String pic;
private Date createtime;
private String detail;
自定義參數綁定實現日期類型綁定
對於controller形參中pojo對象,如果屬性中有日期類型,需要自定義參數綁定。
將請求日期數據串傳成日期類型,要轉換的日期類型和pojo中日期屬性的類型保持一致。本文示例中,自定義參數綁定將日期串轉成java.util.Date類型。
需要向處理器適配器中注入自定義的參數綁定組件。
自定義日期類型綁定
public class CustomDateConverter implements Converter{
public Date convert(String s) {
//實現 將日期串轉成日期類型(格式是yyyy-MM-dd HH:mm:ss)
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
try {
//轉成直接返回
return simpleDateFormat.parse(s);
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//如果參數綁定失敗返回null
return null;
}
}
配置方式
springmvc和struts2的區別
1.springmvc基於方法開發的,struts2基於類開發的。
springmvc將url和controller方法映射。映射成功後springmvc生成一個Handler對象,對象中只包括了一個method。方法執行結束,形參數據銷毀。springmvc的controller開發類似service開發。
2.springmvc可以進行單例開發,並且建議使用單例開發,struts2通過類的成員變量接收參數,無法使用單例,只能使用多例。
3.經過實際測試,struts2速度慢,在於使用struts標簽,如果使用struts建議使用jstl。
商品名稱
商品價格