SimpleFormController往上繼承自AbstractFormController,而又繼承自AbstractController,
這是開始實作Controller介面的基底類別,再往上的兩個類別各司WebApplicationContext與Http response的資源。
對於簡單的表單需求,我們通常透過繼承SimpleFormController,並覆寫其onSumit()方法來完成表單功能,
而實際上真正的表單處理流程定義在AbstractFormController
這邊說明三個我覺得比較常用且不複雜的方法,在繼承了SimpleFormController(AbstractFormController)之後,
您可以覆寫這些方法:formBackingObject()、referenceData()、onBindAndValidate()。
當瀏覽器使用GET方法向Action發出請求時,會調用formBackingObject()方法,您可以在這個方法中預先設定好表單物件,在表單網頁中就會顯示表單的預設值,例如:
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頁面可以參考到的參數,例如:
java 代码
- protected Map referenceData(HttpServletRequest request) throws Exception {
- Map ref = new HashMap();
- ref.put("defalutUser", "guest");
-
- return ref;
- }
onBindAndValidate()就如其名所示,當表單物件的資料已經綁定,並且還沒開始驗證之前,您可以試著在這個方法中作一些預處理,例如進行字母大小寫轉換,附帶一些額外的資訊等等:
java 代码
- protected void onBindAndValidate(HttpServletRequest request, Object command, BindException errors) throws Exception {
- }
url请求来到时,这样处理:
a) 请求传递给一个controller对象
b) 调用formBackingObject()方法,创建一个command对象的实例。
c) 调用initBinder(),注册需要的类型转换器
d) 调用showForm()方法,返回准备呈现给用户的视图
e) 调用referenceData()方法,准备给用户显示相关的数据。如用户登录需要选择的年度信息
f) 返回formView指定的视图
表单请求来到时,这样处理:
a) 调用formBackingObject()方法,创建一个command对象的实例。
b) 将请求传来的参数写入command对象
c) 如果设置为要求验证,则调用validator类进行数据验证
d) 调用onBindAndValidate()方法,该方法允许自定义数据绑定和校验处理
e) 调用onSubmit()方法,进行业务逻辑处理
分享到:
相关推荐
8. **与现代Spring MVC的区别**:虽然`SimpleFormController`简化了许多处理流程,但在Spring 3.0之后,推荐使用基于注解的控制器(`@Controller`),配合`@RequestMapping`、`@ModelAttribute`等注解实现更灵活、更...
在Java Web开发中,Spring MVC框架是一个非常流行的MVC(模型-...但是,理解`SimpleFormController`的工作方式可以帮助我们更好地掌握Spring MVC的核心概念,以及框架如何帮助我们管理Web应用中的数据流和控制流程。
Spring MVC 提供了一些控制器,如 SimpleFormController 和 AbstractWizardController,但它们仍然没有完全解决页面流程的管理问题。 Spring Web Flow 提供了一种统一的方法来定义和实现页面流程,使得流程逻辑独立...
Spring MVC虽然提供了表单控制器(如SimpleFormController和AbstractWizardController),但它们仍然局限在单个请求级别的控制。相比之下,Spring Web Flow提供了一种更高级别的解决方案,它允许开发者以声明式的...
- **Controllers**:控制器是业务逻辑与视图之间的桥梁,可以是AbstractController、AbstractCommandController、SimpleFormController等基类的实例,它们处理请求并返回ModelAndView对象,定义了业务逻辑和视图...
在 Spring 2.5 版本中,Spring MVC 带来了革命性的变化,引入了注解驱动的功能,极大地简化了开发流程,提高了开发效率。本文将深入探讨这些注解的使用,帮助开发者理解如何利用注解配置替代传统的基于 XML 的 ...
Spring提供了多种控制器基类,如`AbstractController`、`AbstractCommandController`、`MultiActionController`、`SimpleFormController`和`AbstractWizardFormController`,以适应不同层次的控制需求。与Struts不同...
控制器可以是简单接口的实现,如`ModelAndView handleRequest(request, response)`,也可以是更复杂的控制器类,如AbstractController、SimpleFormController等。Spring的数据绑定机制非常灵活,可以处理校验错误,...
在Spring MVC早期版本中,Controller通常通过实现Spring的`Controller`接口或者继承`SimpleFormController`、`AbstractCommandController`等基类来创建。然而,随着框架的发展,注解驱动的编程方式逐渐成为主流,如`...
为了提高用户体验和简化操作流程,通常希望这些文件和文本信息能够在同一个表单中完成上传。本方案通过示例代码详细介绍了如何在Java Web项目中实现这一功能。 ### 二、技术选型与环境搭建 #### 技术栈 - **服务器...
PropertiesMethodNameResolver ParameterizableViewController AbstractCommandController AbstractFormController SimpleFormController AbstractWizardFormController ...
这使得整个验证流程保持一致性和友好性。 6. **性能优化**:通过客户端验证,Spring-Validator减少了不必要的服务器交互,提高了系统的响应速度,同时提升了用户体验,因为用户可以实时看到输入错误,无需等待...
- **改进目的**:优化异常处理流程,提供统一的异常处理机制。 - **单元测试支持** - **改进目的**:增强对单元测试的支持,提高测试效率。 - **EL表达式支持** - **改进目的**:支持EL表达式的使用,提高页面...
通过简单的“Hello World”示例,让开发者快速了解PAFA的基本用法和流程。 #### 三、PAFA应用的整体结构 **3.1 开发目录布局** PAFA应用通常包含以下目录结构: - `src/main/java`:存放Java源代码。 - `src/main...