以SimpleFormController為例
1。spring 接收一個請求後首先會判斷"get"還是"post"方法
2。1 "get"方法時
2。1。1 首先創建一個command對象﹐通過調用AbstractFormController的formBackingObject方法得到﹐通常是一個pojo﹐根據name用來和提交的數據綁定。
2。1。2 然後會創建一個BindException對象﹐裡面包括command對象﹐和其他一些屬性。
2。1。3 判斷sessionForm 屬性﹐默認為false。如果為true﹐就會把command對象對象保存在session裡 面。session中key為類名+".FORM." + command對象名。可以通過request.getSession().getAttribute(this.getFormSessionAttributeName(request));得到command對象。
2。1。4 調用AbstractFormController的referenceData方法。這個方法默認為空﹐可以復寫來初始化頁面參數。
2。1。5 返回ModelAndView對象﹐返回formview頁面。
2 。2 “post”方法時
2。2。1 首先得到command對象,如果SessionForm = false﹐調用formBackingObjectde創建
如果SessionForm = true,從request.getSession中得到原command對象﹐然後將command對象從
Session中刪除。
2。2。2 然後會創建一個ServletRequestDataBinder對象﹐裡面包括command對象﹐和其他一些屬性。
這個過程將調用initBinder()﹔可以複寫這個方法初始化數據。
2。2。3 調用processFormSubmission(HttpServletRequest request, HttpServletResponse response, Object command, BindException errors)。有錯誤時返回formview頁面﹐否則進入successview頁面。這個過程將調用onSubmit(Object command)﹐必須複寫這個方法放入業務邏輯。