ITEEDU

AbstractFormController

对 于简单的表单需求,通常透过继承 org.springframework.web.servlet.mvc.SimpleFormController 来 定义 Controller,并重新定 义其 onSubmit()或 doSubmitAction()方法来完成表单功能,而实际上真正的表单处理流程定义 在 org.springframework.web.servlet.mvc.AbstractFormController,在 API 文件中,有说明 其一 连串的方法之作用,这边整理一下当中的说明:

1. 呼叫 formBackingObject()方法,要返回一个 commandClass 的实例。
2. 呼叫 initBinder()方法,允许您对 Command 特定的 Field 作格式化等动作,例如日期格 式、金钱格式等,提供非基本型态或 String 的设定。
3. 呼叫 showForm()方法,返回一个 View 物件,用于表单的展现。
4. 如果"bindOnNewForm"属性被设定为 true,则应用 ServletRequestDataBinder 根据初始 请求参数来填入一个新的表单物件,并且呼叫 onBindOnNewForm()方法。
5. showForm()方法会呼叫 referenceData()方法,如果在展现表单的过程中,需要一些相 关资料,可以回传一个 Map 物件,例如:

 protected Map referenceData( 
			HttpServletRequest request)  
			throws Exception {
	Map ref = new HashMap(); 
	ref.put("defalutUser", "guest"); 
	return ref; 
  } 

这样一来,您就可以在 JSP 网页中使用如${defaultUser}的写法来呈现资料,例如所取得的值会 是"guest"。

6. Model 物件被展现,使用者可以看到表单并进行填写。

使用者填写完表单之后送出表单,将会依以下的流程进行:

1. 接受使用者的表单送出,通常使用 POST,如果不想用 POST 这样的方式来判断使用者是 否送出表单,可以重新定义 isFormSubmission()方法。
2. 如果"sessionForm"属性没有设定,则会呼叫 formBackingObject()方法以取得表单物 件,否则尝试从 session 中取得表单物件,如果没有找到则呼叫 handleInvalidSubmit() 方法,预设的动作是尝试建立新的表单物件并 重新填写表单。
3. ServletRequestDataBinder 根据目前的请求参数填入表单物件。
4. 呼叫 onBind()方法,在绑定资料之后,验证资料之前您可以对表单物件进行一些自订的 修改动作。
5. 如果"validateOnBinding"属性被设定,则使用验证器。
6. 呼叫 onBindAndValidate()方法,允许您在验证资料之后对表单物件作一些处理。
7. 表单物件处理完毕,最后呼叫 processFormSubmission()方法,子类别要重新定义这个 方法,以完成使用者的请求。