`

Spring中的SimpleFormController .

 
阅读更多

SimpleFormControllerAbstractFormController的具体实现,允许你在配置文件里通过successViewformView属性来配置成功视图(表单成功提交后要转向的页面)和表单视图(显示表单的页面);如果提交不合法(有三种可能:1.validator出错。2.bind错误,也就是说从请求中提取参数封装到command的过程中出现了类型转化错误,比如将一个含字母字符串转换为Integer3.onBindAndValidate()方法出错),则会重新返回到表单视图;如果提交合法,onSubmit()方法的默认实现会转向成功页面,当然你可以覆写该方法在转向之前填充一些你想返回的信息。

 

    SimpleFormController的工作流与AbstractFormController差不多,唯一的不同是你不必自己去实现showForm()processFormSubmission()showForm()这个方法已经被类SimpleFormController实现了并被限定为final,你不可以在继承SimpleFormController的子类里覆写这个类。processFormSubmission()这个方法尽管可以去覆写但由于它几乎可以满足所有的要求,因此一般也不会有人去重写它。


它的处理流程是这样的:   
get
请求来到时,这样处理:   
1)
请求传递给一个controller对象   
2)
调用formBackingObject()方法,创建一个command对象的实例。  
3)
调用initBinder(),注册需要的类型转换器   
4)
调用showForm()方法,返回准备呈现给用户的视图 ,如果“bindOnNewForm”属性设为true,ServletRequestDataBinder会将初始请求参数填入一个新的表单对象,并且执行onBindOnNewForm()方法。
5)
调用referenceData()方法,准备给用户显示相关的数据。如用户登录需要选择的年度信息  
6)
返回formView指定的视图

post请求来到时,这样处理:   
1)
如果sessionForm属性没有设定,则调用formBackingObject()方法,创建一个command对象的实例。否则从session中取得表单对象  
2)
将请求传来的参数写入command对象,看它的源代码,会发现它是这样来做的:

ServletRequestDataBinder binder = createBinder(request, command);
binder.bind(request);

3)执行onBind()方法,在绑定数据之后,验证数据之前对表单数据进行一些自制的修改动作。   
4)
如果设置为要求验证(validateOnBinding属性被设定),则调用validator类进行数据验证  
5)
调用onBindAndValidate()方法,该方法允许自定义数据绑定和校验处理  
6
)执行processFormSubmission()检验 Errors对象中含不含错误,如果含有错误则执行showForm()返回到填写表单页面;否则执行onSubmit()方法,进行提交表单,然后转向成功页面。  

 

 

注意点:

XXX-severlet.xml

 

commandClass

validator

sucessView

formView

<property name="commandClass">
   <value>org.springframework.samples.jpetstore.web.srx.register.RegisterInfo</value>
  </property>
  
  <property name="validator">
   <ref local="XXXXValidator"/>
  </property>

 

 

 

--------------------------------------------------------------------

valitator的实现类中的两个实现方法

 

 

 

1使用SimpleFormController时,您可以搭配一个org.springframework.validation.Validator介面的实作物件,帮助您作基本的伺服端资料验证工作,您可以设计一个通用的Validator,将之当作一个Bean注入给需要进行表单验证的其它Bean物件。

Validator
介面有两个必须实作的方法,其定义如下所示:

package org.springframework.validation;

public interface Validator {
    boolean supports(Class clazz);
    void validate(Object obj, Errors errors);
}


supports()
方法回传一个boolean值,表示是否支援对所传入的物件进行验证,只有在传回true的情况下,才会使用validate()方法进行验证工作,在validate()方法的参数中,obj表示传入的表单物件,您可以对它进行一些验证,如果有错误的话,可以使用Errors reject()rejectValue()等方法加入错误讯息,在后续的处理中,若errors物件中包括错误讯息,会回到getViewPage ()所设定的页面。

来看一个简单的实作:

package onlyfun.caterpillar;

import org.springframework.validation.Validator;
import org.springframework.validation.Errors;

public class LoginValidator implements Validator {
    public boolean supports(Class clazz) {
        return clazz.equals(LoginForm.class);
    }
   
    public void validate(Object obj, Errors errors) {
        LoginForm form = (LoginForm) obj;
       
        if(form.getPassword().length() < 4 ) {
            errors.rejectValue("password",
                 "less-than-four", null, "
密码不得小于四个字元");
        }
    }
}


这个Validator类别可以搭配7.2.7介绍的SimpleFormDemo专案来使用,验证通常是在检查资料的完备性、安全性等条件,像是检查密码的格式就是一例,至于使用者名称与密码是否正确,这该算是后继的Controller的处理工作。

搭配SimpleFormController来使用Validator,您只要在Bean定义档中加入ValidatorBean定义,以及让SimpleFormController参考到它即可,例如:

...
<bean id="loginValidator"
       class="onlyfun.caterpillar.LoginValidator"/>
  
<bean id="loginAction"
       class="onlyfun.caterpillar.LoginAction">
    <property name="commandClass">
        <value>onlyfun.caterpillar.LoginForm</value>
    </property>
    <property name="validator">
        <ref bean="loginValidator"/>
    </property>
    <property name="successView">
        <value>success</value>
    </property>
    <property name="formView">
        <value>form</value>
    </property>
</bean>
...


"validator"
属性参考至loginValidator实例,只要有设定"validator"SimpleFormController就会使用它。

在进行验证时,您可以使用org.springframework.validation.ValidationUtils,上面有一些方便的静态方法,像是rejectIfEmpty()rejectIfEmptyOrWhitespace()等,可以查查线上API文件看如何使用。

另一方面,对于AbstractWizardFormController,您可以重新定义它的validatePage()方法来进行验证,例如:

...
    protected void validatePage(Object command,
                                Errors errors, int page) {
        (YourCommand) your = (YourCommand) command;
        switch(page) {
             case 1:
                  validator.validateSome(your, errors);
                 break;
             case 2:
                  validator.validateOther(your, errors);
                 break;
              ....
        }
    }
..


每进行一页Wizard表单,都会呼叫该方法一次,让您针对该次送出的数据进行验证,"page"参数表示该次送出表单的页数,与 SimpleFormControllerValidator不同的是,AbstractWizardFormController不会自动调用 Validatorvalidate()方法,您要根据当次页面的资料自行进行对应的方法验证,通常采取如上的委托物件,将验证交由一个 Validator物件来执行。

分享到:
评论

相关推荐

    SPRING API 2.0.CHM

    All Classes AbstractAdvisorAutoProxyCreator AbstractApplicationContext AbstractApplicationEventMulticaster AbstractAspectJAdvice AbstractAspectJAdvisorFactory AbstractAspectJAdvisorFactory....

    Spring MVC控制器之SimpleFormController使用

    本篇文章将详细探讨`Spring MVC`中的`SimpleFormController`类及其使用方法。 `SimpleFormController`是Spring MVC早期版本中用于处理表单数据的控制器类,它为开发者提供了一种简化表单处理的抽象。在Spring 3.0...

    使用 Spring 2.5 基于注解驱动的 Spring MVC.doc

    这与传统的实现 `org.springframework.web.servlet.mvc.Controller` 接口或者继承 `SimpleFormController` 或 `MultiActionController` 不同,`@Controller` 注解使得我们的类变成了一个纯粹的 POJO,无需额外的接口...

    一个最简单的SimpleFormController使用

    在Spring MVC框架中,`SimpleFormController`是一个基础的控制器类,它简化了处理表单提交和模型数据绑定的过程。这个控制器是Spring MVC早期版本中的一个组件,现在已经被`@Controller`注解的类所取代,尽管如此,...

    Spring的各种控制器

    本示例主要探讨了两种类型的控制器:SimpleController和MutiActionControl,它们在Spring MVC中扮演着不同的角色。 **SimpleController** SimpleController是Spring MVC早期版本中的一种基础控制器实现,它的名字...

    Spring Tutorial.pdf

    - **创建Hello World示例**:在Spring IDE中创建一个新的Spring项目,并编写一个简单的Hello World程序,演示如何使用Spring管理Bean。 #### 三、Spring IoC容器 - **IoC(Inversion of Control)**:控制反转,是...

    Spring—mvc实例

    此外,Spring MVC还支持多种类型的Controller,如Command Controller、SimpleFormController、Annotation-driven Controller等,每种都有其特定的应用场景和优势。学习Spring MVC,深入理解这些Controller的用法,将...

    开源框架 Spring Gossip

    第一个 Struts 程式 在 Struts 中整合 Spring 第一个 JSF 程式 在 JSF 中整合 Spring &lt;br&gt; 其它 Spring 提供了简化且一致的方式,让您在使用一些 API 或服务时更加简单。 远程...

    spring mvc 附件上传代码

    本文档将详细介绍如何在Spring MVC环境中配置并实现文件上传功能,包括必要的`web.xml`配置、Spring配置文件(如`upload-servlet.xml`)设置及控制器的具体编写。 #### 二、`web.xml`配置详解 `web.xml`文件用于...

    搞定J2EE:STRUTS+SPRING+HIBERNATE整合详解与典型案例 (1)

    10.5.3 表单控制器(SimpleFormController) 10.5.4 多动作控制器(MultiActionController) 10.6 Spring的视图映射机制 10.6.1 分发器(DispatcherServlet) 10.6.2 视图映射 10.7 Spring的模型(Model) 10.7.1 ...

    Spring-WebFlow入门中文文档

    Spring MVC 提供了一些控制器,如 SimpleFormController 和 AbstractWizardController,但它们仍然没有完全解决页面流程的管理问题。 Spring Web Flow 提供了一种统一的方法来定义和实现页面流程,使得流程逻辑独立...

    Spring学习笔记总结

    Spring提供了多种类型的Controller,包括Controller接口、AbstractCommandController和SimpleFormController。 Command 在Spring MVC中,Command是核心组件,它负责将用户的输入请求转换为模型对象。Spring提供了...

    搞定J2EE:STRUTS+SPRING+HIBERNATE整合详解与典型案例 (3)

    10.5.3 表单控制器(SimpleFormController) 10.5.4 多动作控制器(MultiActionController) 10.6 Spring的视图映射机制 10.6.1 分发器(DispatcherServlet) 10.6.2 视图映射 10.7 Spring的模型(Model) 10.7.1 ...

    Spring Web MVC framework中英文对照.pdf

    Spring Web MVC框架是Spring框架中的一个重要组成部分,主要用于构建基于Java的应用程序中的Web层。该框架围绕一个核心组件`DispatcherServlet`进行设计,其主要职责是将HTTP请求分发到对应的控制器(Controller)上,...

    Spring的web整合包

    Spring框架是Java开发中最常用的轻量级开源框架之一,它为构建高质量的Web应用程序提供了全面的支持。Spring4.3.7版本的Web整合包包含了Spring框架在Web开发中所需的各种组件,这些组件使得开发者能够轻松地实现MVC...

    搞定J2EE:STRUTS+SPRING+HIBERNATE整合详解与典型案例 (2)

    10.5.3 表单控制器(SimpleFormController) 10.5.4 多动作控制器(MultiActionController) 10.6 Spring的视图映射机制 10.6.1 分发器(DispatcherServlet) 10.6.2 视图映射 10.7 Spring的模型(Model) 10.7.1 ...

    Spring MVC 例子

    本示例将深入探讨`SimpleFormController`和`MultiActionController`这两种控制器在Spring MVC中的应用。 首先,`SimpleFormController`是Spring MVC早期版本中提供的一个抽象控制器,主要用于处理表单提交。它内置...

    SpringMVC教程及实现原理

    SpringMVC是Spring框架中的一个重要组成部分,主要用于构建Web应用。它基于MVC(Model-View-Controller)设计模式,帮助开发者构建可扩展的、易于维护的Web应用程序。 #### 二、SpringMVC的JAR包介绍 Spring3.0...

    外文翻译Spring地web MVC 构架模式.pdf

    这意味着Spring的应用可以在任何Servlet容器中运行,如Tomcat或Resin,而不依赖特定的服务器功能。 5. **技术选择和灵活性** Spring的设计鼓励使用标准技术和工具,如Servlet、JSP、JTA、JNDI、JDBC、JDO,以及...

Global site tag (gtag.js) - Google Analytics