Spring 的 AbstractFormController (转载)
来源:互联网 发布:windows live id密码 编辑:程序博客网 时间:2024/06/01 11:41
以下是 Spring 的 AbstractFormController 處理流程,這些資料是附在 API 文件中的 AbstractFormController 內
我在這邊作一個整理,目前剛好有使用到 Spring
可能可以參考一下他的 Controller 使用方法
不過很多人說 webwork 比較好用,撰寫 action 比較好用
先試試看吧.....
以下為在處理 Controller 的時候,每個步驟會呼叫的 method (意思就是說如果針對某個步驟,需要作處理的話,就要實作這個 Method)
前面的幾個部分,是在準備的階段
1. formBackingObject
預設如果使用 Get 的方式呼叫 Action,就會先呼叫
可以在這個 Method 回傳一個已經定義好的 Object
在 form 初期設定的時候可以使用
2. initBinder
可以在這個方法裡面去替某些不是 primitive-type or String 的資料型態
去作一些特別的處理,讓這些欄位的資料可以在 HTML 展現的時候,會是你所想要的樣子
比如說日期的格式轉換、數字的千分位格式等
這時候要使用 ServletRequestDataBinder.registerCustomEditor()
public void registerCustomEditor(Class requiredType, PropertyEditor propertyEditor)
public void registerCustomEditor(Class requiredType, String field, PropertyEditor propertyEditor)
如果只是要針對某一種型態的資料作特別的轉換,就用第一種方法
如果必須要針對某一個欄位作特別的設定,就要用第二種方法
處理的方式將要使用 PropertyEditor 來實作
日期格式
org.springframework.beans.propertyeditors.CustomDateEditor(DateFormat dateFormat, boolean allowEmpty)
Example: binder.registerCustomEditor(java.util.Date.class, new CustomDateEditor(new SimpleDateFormat("yyyy/MM/dd"), true));
數字格式
org.springframework.beans.propertyeditors.CustomNumberEditor(Class numberClass, NumberFormat numberFormat, boolean allowEmpty)
其他的 PropertyEditor 可以參考 org.springframework.beans.propertyeditors 這個 Package
PropertyEditor 為 java.bean 的 Interface
要參考 java.beans.PropertyEditorSupport
(only if bindOnNewForm is set to true)
3. showForm
回傳一個 ModelAndView 給前端,實際上展現的 View 會在這裡決定
但是如果不想在這裡設定的話,就必須要繼承 SimpleFormController,並且要設定 formView 這個 Property
4. referenceData
如果在編輯 form 的過程當中,還需要一些與 form 有相關連的資料需要使用
可以在這裡回傳一個 Map,讓前端可以使用,主要是以 BeanName/BeanInstance 的方式回傳
這裡回傳的資料,同樣會放置到 ModelAndView 內的 map 中
5. 接下來 Model 將會真正展現畫面,這時候就是讓使用者開始填寫 form 的資料的時候了
接下來的部分,當使用者填寫完資料以後,要將資料送到後端來的處理,一般來說是 POST 的方式
6. 如果使用者使用 POST 的方式,預設就會開始以下的處理,如果使用者不想根據 POST/GET 這樣的判斷方式來決定
可以 Override isFormSubmission(javax.servlet.http.HttpServletRequest) method.
7. 如果 sessionForm 這個屬性沒有設定 (預設為 false),就會去呼叫 formBackingObject 取得 form object
如果有設定 sessionForm=true, 將會試著去找尋 session 內有沒有相關的 form object 的存在
如果沒有找到,就會觸發 handleInvalidSubmit 這個 method
出現的情況可能是 reSubmit
預設的作法是會重新 submit,產生一個新的 form object 再處理
如果要避免duplicate submissions,那就要自己 Override 這個 method,看是要顯示 "invalid submit" 的訊息,還是呼叫 showNewForm 重設 form object
8. 取得 form object 之後,會根據ServletRequestDataBinder來決定要怎樣設定資料
我想這邊就是反向處理吧,在前面是將特定的資料型態轉換成字串顯示
這裡可能就是將特定的字串轉換成資料格式吧(我猜的)
9. onBind
在 bind 與 validation 之間,會呼叫這個 method,可以在這邊在作一些 customer bind 的動作
10. 如果 validateOnBinding 有被設定,那麼就會去呼叫被註冊的 validation object
11. 當 validate object 處理完畢,但是又想作一些 custom validate 的動作,可以在 onBindAndValidate 內實作
12. 如果 validate 失敗,就會呼叫 showForm 重新回到 formView 讓使用者重新修改後 submit
但是如果成功的話,就會到 processFormSubmission,這時候就可以處理這次 request 的動作了
這個 method 是一定要實作的
以上為 AbstractCommandController 的處理流程,如果是繼承 SimpleFormController 就簡單很多
在 processFormSubmission處理完畢之後,僅需要考慮要實作那個 onSubmit method,來決定當回到 successView 前要作的事情
我在這邊作一個整理,目前剛好有使用到 Spring
可能可以參考一下他的 Controller 使用方法
不過很多人說 webwork 比較好用,撰寫 action 比較好用
先試試看吧.....
以下為在處理 Controller 的時候,每個步驟會呼叫的 method (意思就是說如果針對某個步驟,需要作處理的話,就要實作這個 Method)
前面的幾個部分,是在準備的階段
1. formBackingObject
預設如果使用 Get 的方式呼叫 Action,就會先呼叫
可以在這個 Method 回傳一個已經定義好的 Object
在 form 初期設定的時候可以使用
2. initBinder
可以在這個方法裡面去替某些不是 primitive-type or String 的資料型態
去作一些特別的處理,讓這些欄位的資料可以在 HTML 展現的時候,會是你所想要的樣子
比如說日期的格式轉換、數字的千分位格式等
這時候要使用 ServletRequestDataBinder.registerCustomEditor()
public void registerCustomEditor(Class requiredType, PropertyEditor propertyEditor)
public void registerCustomEditor(Class requiredType, String field, PropertyEditor propertyEditor)
如果只是要針對某一種型態的資料作特別的轉換,就用第一種方法
如果必須要針對某一個欄位作特別的設定,就要用第二種方法
處理的方式將要使用 PropertyEditor 來實作
日期格式
org.springframework.beans.propertyeditors.CustomDateEditor(DateFormat dateFormat, boolean allowEmpty)
Example: binder.registerCustomEditor(java.util.Date.class, new CustomDateEditor(new SimpleDateFormat("yyyy/MM/dd"), true));
數字格式
org.springframework.beans.propertyeditors.CustomNumberEditor(Class numberClass, NumberFormat numberFormat, boolean allowEmpty)
其他的 PropertyEditor 可以參考 org.springframework.beans.propertyeditors 這個 Package
PropertyEditor 為 java.bean 的 Interface
要參考 java.beans.PropertyEditorSupport
(only if bindOnNewForm is set to true)
3. showForm
回傳一個 ModelAndView 給前端,實際上展現的 View 會在這裡決定
但是如果不想在這裡設定的話,就必須要繼承 SimpleFormController,並且要設定 formView 這個 Property
4. referenceData
如果在編輯 form 的過程當中,還需要一些與 form 有相關連的資料需要使用
可以在這裡回傳一個 Map,讓前端可以使用,主要是以 BeanName/BeanInstance 的方式回傳
這裡回傳的資料,同樣會放置到 ModelAndView 內的 map 中
5. 接下來 Model 將會真正展現畫面,這時候就是讓使用者開始填寫 form 的資料的時候了
接下來的部分,當使用者填寫完資料以後,要將資料送到後端來的處理,一般來說是 POST 的方式
6. 如果使用者使用 POST 的方式,預設就會開始以下的處理,如果使用者不想根據 POST/GET 這樣的判斷方式來決定
可以 Override isFormSubmission(javax.servlet.http.HttpServletRequest) method.
7. 如果 sessionForm 這個屬性沒有設定 (預設為 false),就會去呼叫 formBackingObject 取得 form object
如果有設定 sessionForm=true, 將會試著去找尋 session 內有沒有相關的 form object 的存在
如果沒有找到,就會觸發 handleInvalidSubmit 這個 method
出現的情況可能是 reSubmit
預設的作法是會重新 submit,產生一個新的 form object 再處理
如果要避免duplicate submissions,那就要自己 Override 這個 method,看是要顯示 "invalid submit" 的訊息,還是呼叫 showNewForm 重設 form object
8. 取得 form object 之後,會根據ServletRequestDataBinder來決定要怎樣設定資料
我想這邊就是反向處理吧,在前面是將特定的資料型態轉換成字串顯示
這裡可能就是將特定的字串轉換成資料格式吧(我猜的)
9. onBind
在 bind 與 validation 之間,會呼叫這個 method,可以在這邊在作一些 customer bind 的動作
10. 如果 validateOnBinding 有被設定,那麼就會去呼叫被註冊的 validation object
11. 當 validate object 處理完畢,但是又想作一些 custom validate 的動作,可以在 onBindAndValidate 內實作
12. 如果 validate 失敗,就會呼叫 showForm 重新回到 formView 讓使用者重新修改後 submit
但是如果成功的話,就會到 processFormSubmission,這時候就可以處理這次 request 的動作了
這個 method 是一定要實作的
以上為 AbstractCommandController 的處理流程,如果是繼承 SimpleFormController 就簡單很多
在 processFormSubmission處理完畢之後,僅需要考慮要實作那個 onSubmit method,來決定當回到 successView 前要作的事情
- Spring 的 AbstractFormController (转载)
- springMVC 之 AbstractFormController
- AbstractFormController执行流程
- Spring的国际化(转载)
- Spring的事务处理(转载)
- Spring的IOC原理(转载)
- Spring的IOC原理(转载)
- Spring的IOC原理(转载)
- Spring的IOC原理(转载)
- Spring MVC框架的高级配置(转载)
- Spring 的文件上传 !(转载后编辑)!
- Spring 中Bean的高级属性(转载)
- Spring的声明式事务管理-转载
- spring的事务处理详解[原blog转载]
- Spring的一个例子(转载)
- Spring定时任务的简单例子(转载)
- 转载:理解Spring OC 与& AOP 的
- [转载]Spring创建Bean的过程
- 代码代码
- ASP常用代码
- 08年,如何迈出职场成功第一步?
- 浅析JSP开发中的对象和范围属性(转)
- CDialogResize类的使用
- Spring 的 AbstractFormController (转载)
- TC界面及常用热键图解 by eric4ever
- 祝福短信
- 原创短信
- jQuery中文入门指南
- 设计模式之Singleton
- Web------随机函数
- AIX5.3的磁盘镜像、更换操作汇总
- 利用ashx实现AJAX的异步数据调用