SimpleFormController往上繼承自AbstractFormController,,而又繼承自AbstractController,
這是開始實作Controller介面的基底類別,再往上的兩個類別各司W(wǎng)ebApplicationContext與Http response的資源,。
對於簡單的表單需求,我們通常透過繼承SimpleFormController,,並覆寫其onSumit()方法來完成表單功能,,
而實際上真正的表單處理流程定義在AbstractFormController
這邊說明三個我覺得比較常用且不複雜的方法,在繼承了SimpleFormController(AbstractFormController)之後,,
您可以覆寫這些方法:formBackingObject(),、referenceData(),、onBindAndValidate()。
當瀏覽器使用GET方法向Action發(fā)出請求時,,會調用formBackingObject()方法,,您可以在這個方法中預先設定好表單物件,在表單網(wǎng)頁中就會顯示表單的預設值,,例如:
java 代碼
- protected Object formBackingObject(HttpServletRequest request) throws Exception {
- LoginForm loginForm = new LoginForm();
- loginForm.setUsername("guest");
- loginForm.setPassword("guest");
-
- return loginForm;
- }
在使用者送出資料之後,,如果sessionForm為false,則會再呼叫formBackingObject()方法取得表單物件,,若sessionForm設定為true,,則會試著有session中找尋表單物件。
您可以在referenceData()中定義一些JSP頁面可以參考到的參數(shù),,例如:
java 代碼
- protected Map referenceData(HttpServletRequest request) throws Exception {
- Map ref = new HashMap();
- ref.put("defalutUser", "guest");
-
- return ref;
- }
onBindAndValidate()就如其名所示,,當表單物件的資料已經(jīng)綁定,並且還沒開始驗證之前,,您可以試著在這個方法中作一些預處理,,例如進行字母大小寫轉換,附帶一些額外的資訊等等:
java 代碼
- protected void onBindAndValidate(HttpServletRequest request, Object command, BindException errors) throws Exception {
- }
url請求來到時,,這樣處理:
a) 請求傳遞給一個controller對象
b) 調用formBackingObject()方法,,創(chuàng)建一個command對象的實例。
c) 調用initBinder(),,注冊需要的類型轉換器
d) 調用showForm()方法,,返回準備呈現(xiàn)給用戶的視圖
e) 調用referenceData()方法,準備給用戶顯示相關的數(shù)據(jù),。如用戶登錄需要選擇的年度信息
f) 返回formView指定的視圖
表單請求來到時,,這樣處理:
a) 調用formBackingObject()方法,創(chuàng)建一個command對象的實例,。
b) 將請求傳來的參數(shù)寫入command對象
c) 如果設置為要求驗證,,則調用validator類進行數(shù)據(jù)驗證
d) 調用onBindAndValidate()方法,該方法允許自定義數(shù)據(jù)綁定和校驗處理
e) 調用onSubmit()方法,,進行業(yè)務邏輯處理
|