`
天边一朵雲
  • 浏览: 36606 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

(OTHER)Struts2后台验证

 
阅读更多
一. 手动输入完成校验:

1.普通的处理方式:只需要在action中重写validate()方法

2.一个action对应多个逻辑处理方法:指定校验摸个特定方法的方式:

重写validateXxxx()方法。Eg:如果,只校验login方法,则只需重写validateLogin().

二. 输入校验流程:

1. 类型转换器负责对字符串的请求参数执行类型转换。并将这些值设置成Action的属性值。

2. 转换过程中若出现异常,则将异常信息保存到ActionContext中,conversionError拦截器将其封装到fieldError中。

3. 通过反射调用validateXxx()方法。

4. 调用validate().

5. 如果未出现异常,则转入用户请求的处理方法,如果出现异常,则转入inout视图所指定的视图资源(所以,对于验证的方法,必须要在配置文件中为其指定input)。

三. 基于验证框架的输入校验

1. 编写校验配置文件:命名规则:action类名-validatin.xml. 
2. 一个action对应多个逻辑处理方法:指定校验摸个特定方法的方式: 
action类名-name属性名-validatin.xml.(name属性名:在strtus配置文件中的) 
3. 配置文件存放位置:放在与Action相同的文件夹内。 
4. 验证规则:先加载action类名-validatin.xml,
然后加载action类名-name属性名-validatin.xml文件。 
5. 校验器的配置风格:两种:字段校验器,非字段校验器。 
字段校验器配置格式: 
<field name="被校验的字段"> 
       <field-validator type="校验器名"> 
              <!--此处需要为不同校验器指定数量不等的校验规则--> 
              <param name="参数名">参数值</param> 
                  .................... 
              <!--校验失败后的提示信息,其中key指定国际化信息的key--> 
              <message key="I18Nkey">校验失败后的提示信息</message> 
              <!--校验失败后的提示信息:建议用getText("I18Nkey"),否则可能出现Freemarker template Error--> 
       </field-vallidator> 
       <!-- 如果校验字段满足多个规则,下面可以配置多个校验器--> 
</field> 
<!--非字段校验器配置格式:--> 
<validator type="校验器名"> 
          <param name="fieldName">需要被校验的字段</param> 
          <!--此处需要为不同校验器指定数量不等的校验规则-->         
<param name="参数名">参数值</param> 
          <!--校验失败后的提示信息,其中key指定国际化信息的key--> 
          <message key="I18Nkey">校验失败后的提示信息</message> 
          <!--校验失败后的提示信息:建议用getText("I18Nkey"),否则可能出现Freemarker template Error--> 
</validator> 
<!--非字段校验:先指定校验器:由谁来校验,来校验谁!--> 
<!--字段校验器:先指定校验的属性:我来校验谁,由谁来校验-->



1. 校验器:struts2提供了大量的内置校验器:你可以在xwork-core-2.1.6.jar的com.opensymphony.xwork2.validator.validators下找到如下配置文件:default.xml.里面列出了所有的内置校验器。

struts2表单验证里field-validator type值:
int 整数;
double 实数;
date 日期;
expression  两数的关系比较; 
email Email地址;
url
visitor
conversion 
regex 正则表达式验证;
required 是否为空;
requiredstring 必须字符;
stringlength 输入字符长度限制;
url web地址
visitor 访问
conversion 转换
<validators> 
<!—必填校验器 --> 
<validator name="required" class="com.opensymphony.xwork2.validator.validators.RequiredFieldValidator"/> 
<!—必填字符串校验器--> 
<validator name="requiredstring" class="com.opensymphony.xwork2.validator.validators.RequiredStringValidator"/> 
<!-- 整数校验器 --> 
<validator name="int" class="com.opensymphony.xwork2.validator.validators.IntRangeFieldValidator"/> 
<!-- --> 
<validator name="long" class="com.opensymphony.xwork2.validator.validators.LongRangeFieldValidator"/> 
<validator name="short" class="com.opensymphony.xwork2.validator.validators.ShortRangeFieldValidator"/> 
<validator name="double" class="com.opensymphony.xwork2.validator.validators.DoubleRangeFieldValidator"/> 
<!-- 日期校验器 --> 
<validator name="date" class="com.opensymphony.xwork2.validator.validators.DateRangeFieldValidator"/> 
<!--  表达式校验器 --> 
<validator name="expression" class="com.opensymphony.xwork2.validator.validators.ExpressionValidator"/> 
<!--  字段表达式校验器 --> 
<validator name="fieldexpression" class="com.opensymphony.xwork2.validator.validators.FieldExpressionValidator"/> 
<!--  邮件校验器 --> 
<validator name="email" class="com.opensymphony.xwork2.validator.validators.EmailValidator"/> 
<!--  网址校验器 --> 
<validator name="url" class="com.opensymphony.xwork2.validator.validators.URLValidator"/> 
<validator name="visitor" class="com.opensymphony.xwork2.validator.validators.VisitorFieldValidator"/> 
<!--  转换器校验器 --> 
<validator name="conversion" class="com.opensymphony.xwork2.validator.validators.ConversionErrorFieldValidator"/> 
<!--  字符串长度校验器 --> 
<validator name="stringlength" class="com.opensymphony.xwork2.validator.validators.StringLengthFieldValidator"/> 
<!--  正则表达式校验器 --> 
<validator name="regex" class="com.opensymphony.xwork2.validator.validators.RegexFieldValidator"/> 
<validator name="conditionalvisitor" class="com.opensymphony.xwork2.validator.validators.ConditionalVisitorFieldValidator"/> 
</validators>

这些校验器已经可以满足大多数的验证需求,如果还需要特殊的要求,建议直接采用java代码搞定,除非你有很多地方都要用到,此时你可以自定义一个校验器。

四. 校验器的执行顺序

1. 所有非字段校验风格的校验器优先于字段校验风格的校验器;

2. 所有非字段校验风格的校验器中,排在前面的会先执行;

3. 所有字段校验风格的校验器,排在前面的会先执行;

五. 校验器的短路原则

1. 所有非字段检验器时最优先执行的,如果某个非字段校验器校验失败了,则该字段上的所有字段校验器都不会获得校验机会;

2. 非字段校验校验失败,不会阻止其他非字段校验执行;

3. 如果一个字段校验器校验失败后,则该字段下且排在该校验失败后的检验器之后的其他字段校验器不会获得校验机会;

4. 字段校验器永远不会阻止非字段校验器的执行!

六. 短路校验器

短路校验器:只需在或元素中添加short-circuit=”true”属性。

注:在struts2.1.6版本,已经支持客户端的短路校验。

七. 客户端的校验:

在中添加validate=”true”.

Struts2提供了客户端校验与服务端校验。这里只是做个简易的总结。

1.)服务端校验:

当程序流程进入到Action类,并经历了struts2的类型转换阶段后。接着进入struts2的输入校验阶段。

struts2的输入校验可自己编码进行校验,也可通过有规则命名的配置文件进行校验。

1.1)编码校验:

在Action类里重写父类的validate()方法即可。

public void validate(){
    if(null == username || "".equals(username)){
        this.addFieldError("username","username should not be empty !");
    }else if(username.length() < 6 || username.length() > 12){
        this.addFieldError("username","username should be between 6 and 12 !");
    }

    if(null == password || "".equals(password )){    
        this.addFieldError("password ","password should not be empty !");
    }else if(password .length() < 6 || password .length() > 12){
        this.addFieldError("password ","password should be between 6 and 12 !");   
    }
}

在上面的validate方法中,一旦发现校验失败,就把失败提示通过addFieldError方法添加到系统的fieldError中。校验完毕后,若系统的fieldError不为空,则自动转到input视图对应的JSP页面中输出错误提示,这与类型转换失败后的处理是完全一样的。

为了在input视图中对应的JSP页面输出错误提示,应该在该页面中增加如下代码:

这里不能忽略另外种情况:Struts2的Action类里可以包含多个处理逻辑,不同的处理逻辑对应不同的方法。即Struts2的Action类里定义了几个类似于execute的方法,只是方法名不同。而重写validate方法无法知道需要校验的是哪个处理逻辑。实际上重写validate方法会校验所有的处理逻辑。

为了校验指定处理逻辑,需提供一个validateXxx()方法,其中xxx为Action对应的处理逻辑方法。

例如Action类里有个login()逻辑方法,那么对应的校验方法validateLogin()方法。

但之后还是会调用validate()进行校验,因此此时validate()没必要写了,或者让validate()进行公共字段的校验。

1.2)配置文件校验

只需为Action指定一个校验文件即可。在Action类所在的com.test.action包下建立LoginAction-validation.xml校验文件(格式:Action类名-validation.xml).

LoginAction-validation.xml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC
 "-//OpenSymphony Group//XWork Validator 1.0.2//EN" 
"http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">

<validators>

   <field name="username">
     <field-validator type="requiredstring">
       <param name="trim">true</param>
       <message>username should not be empty !</message>
     </field-validator>
   
     <field-validator type="stringlength">
       <param name="minLength">6</param>
       <param name="maxLength">12</param>
       <message>username should be between
 ${minLength} and ${maxLength}!</message>
     </field-validator>
   </field>
   
   <field name="password">
     <field-validator type="requiredstring">
       <param name="trim">true</param>
       <message>password should not be empty !</message>
     </field-validator>
   
     <field-validator type="stringlength">
       <param name="minLength">6</param>
       <param name="maxLength">12</param>
       <message>password should be between
 ${minLength} and ${maxLength}!</message>
     </field-validator>
   </field>
       
</validators>


每个元素指定一个Action属性必须遵守的规则,该元素name属性指定了被校验的字段;如果该属性满足多个规则,则在该下增多个。

每个指定一个校验规则,该元素的type属性指定校验器名称该元素可以包含多个子元素,用户指定该校验器的参数;除外,每个元素都有一个必须的元素,用户确定校验失败后的提示信息。

例子中只采用了"必填字符串校验器"和"字符串长度校验器"2个校验规则。

struts2貌似共提供了13个校验器:
required:必填校验器
requiredstring:必填字符串校验器
int:整数校验器
double:双精度浮点数校验器
date:日期校验器
expression:表达式校验器
fieldexpression:字段表达式校验器
email:电子邮件校验器
url:网址校验器
visitor:Visitor校验器
conversion:转换校验器
stringlength:字符串长度校验器
regex:正则表达式校验器

用法大部分雷同,用到的时候可自己google搜索。

配置文件校验肯定不输给编码校验的,自然也提供了对应于具体业务逻辑的校验规则文件的格式:

例:

<!-- 配置一个名为user的Action,对应的逻辑方法为UserAction的login方法-->

<action name="login" class="com.test.action.UserAction" method="login">
    <result name="input">/login.jsp</result>
    <result name="success">/index.jsp</result>
</action>

则此逻辑方法对应的校验规则文件为:
UserAction-login-validation.xml

与编码校验一样,校验错误信息会添加到系统的fieldError中,校验完毕后若FieldError不为空。则进入到input视图对应的JSP。在处输出错误提示。

提醒:没记错的话。与编码校验不同的是校验顺序,配置文件校验方式下,

先UserAction-validation.xml,再UserAction-login-validation.xml,

因此若是只针login()逻辑进行输入校验的话,那UserAction-validation.xml没必要写了,或让其进行公共字段的校验

2)客户端校验

增加客户端校验非常简单,将输入页面的表单元素改为使用struts2标签来生成表单,并且为该表单增加validate="true"属性即可。

来源:赛迪网 http://news.ccidnet.com/art/32855/20100713/2113783_1.html

分享到:
评论

相关推荐

    struts2官方开发文档

    For other community-supported Struts resources, visit the Struts 2 Wiki. The contents of the Struts 2 documentation wiki (what you're reading now) are distributed with each release, but maintained via...

    JCaptcha4Struts2快速使用指南

    在Struts2项目中添加JCaptcha验证可以有效保护表单提交的安全性,防止机器人或爬虫程序进行无效或恶意的提交。 **安装和配置JCaptcha4Struts2** 1. **下载和安装**:首先,你需要从官方源(例如Google Code仓库,...

    Struts2表单标签使用范例

    在处理表单验证方面,Struts2允许我们在Action类中定义字段级和Action级的验证规则。例如,我们可以使用注解`@Size`来限制用户名的长度: ```java public class UserAction extends ActionSupport { @Size(min = 5...

    Struts开发应用验证示例

    2. **配置Validator**:在Struts应用中,首先需要在struts-config.xml文件中配置Validator插件,声明对应的ValidatorForm类和验证规则文件。例如: ```xml &lt;plug-in className="org.apache.struts.validator....

    struts2树的编写

    Struts2是一个强大的Java EE应用程序框架,用于构建可维护、可扩展且高度模块化的Web应用程序。在Struts2中,树形结构的实现是常见的需求,例如用于展示组织架构、文件目录或者数据库层次关系等。本节将深入探讨如何...

    Struts2配置详解

    ### Struts2配置详解 #### 一、总览 在深入了解Struts2的配置细节之前,我们先来简要概述一下Struts2框架的核心特点及其配置文件的基本结构。Struts2是一个基于MVC(Model-View-Controller)设计模式的Java Web...

    struts2 简单的文件上传

    Struts2是一个强大的MVC(模型-视图-控制器)框架,广泛应用于Java Web开发中。文件上传是Web应用中的常见功能,例如用户上传图片、文档等。在Struts2框架下实现文件上传,需要理解以下几个核心概念和步骤: 1. **...

    公司培训时用myeclips做的适合初学者的struts2例子

    MyEclipse提供了对Struts2的内置支持,包括模板Action类、ActionForm创建、Struts2配置文件的编辑和验证等。开发者可以通过MyEclipse的New -&gt; Other -&gt; Struts2选项快速创建Struts2项目和相关组件,大大简化了开发...

    Struts2学习笔记2012

    Struts2提供了内置的数据验证机制,可以通过在Action类中定义`validate()`方法来实现。此方法会在执行Action前被调用,用于检查用户输入是否符合预期格式。 #### 七、StrutsValueStack(值栈)Debug 值栈是Struts2...

    struts2完全学习手册

    struts.custom.properties=test,org/apache/struts2/othertest ``` - **自定义默认资源束加载**:可以加载自定义的资源束文件。 ```properties struts.custom.i18n.resources=testmessages,testmessages2 ```...

    struts2的token实现.

    2. **验证Token**:在Action的execute方法或其他处理表单的方法中,Struts2会自动进行Token验证。如果Token无效,Action的execute方法不会被执行,而是返回一个默认的错误结果,比如`input`。 3. **处理Token异常**...

    struts-spring-other-lib 等jar包

    struts-spring-other-lib 等jar包struts-spring-other-lib 等jar包struts-spring-other-lib 等jar包struts-spring-other-lib 等jar包struts-spring-other-lib 等jar包struts-spring-other-lib 等jar包struts-spring-...

    Struts2.3.16.3 chm帮助文档

    For other community-supported Struts resources, visit the Struts 2 Wiki. The contents of the Struts 2 documentation wiki (what you're reading now) are distributed with each release, but maintained via...

    struts2实现自主选择页面语言

    Struts2是一个强大的Java EE框架,它为构建MVC(模型-视图-控制器)架构的应用程序提供了便利。在“struts2实现自主选择页面语言”这个项目中,我们主要探讨的是如何利用Struts2的国际化(i18n)功能来支持多语言...

    Struts2中使用Tiles组件

    Struts2是一个强大的Java web应用程序框架,它极大地简化了MVC(模型-视图-控制器)架构的实现。而Tiles是Struts2的一个重要组成部分,它允许开发者将多个页面组合成一个复杂的页面布局,实现了视图的重用和模块化。...

    Struts2 实例 HelloWorld

    最后,引入Struts2所需的jar包,包括xwork-2.0.4.jar(Struts2的核心包,包含拦截器、验证、类型转换等功能)和struts2-core-2.0.11.jar等。 4. **添加资源和配置**:创建helloworld.jsp页面,HelloWorldAction类...

    Struts2.0学习Struts2.0文档

    1. **MVC 2 模型的使用**:Struts 2.0 采用了经典的MVC架构,这使得开发者能够清晰地分离业务逻辑(Model)、用户界面(View)和控制流程(Controller),从而提高了代码的可维护性和可扩展性。 2. **功能齐全的标签...

    Struts2_0800_DomainModelParamInput

    "Struts2_0800_DomainModelParamInput"可能是一个教程或示例项目,旨在展示如何在Struts2中使用领域模型参数进行输入验证。 在Struts2中,领域模型通常代表业务逻辑中的对象,如用户、产品或订单。这些模型类包含了...

    swfupload与struts2整合文件上传/完整Java实例

    Struts2作为Java EE领域的一个强大MVC框架,广泛应用于构建企业级Web应用。将SwfUpload与Struts2整合,可以创建高效、友好的文件上传界面。接下来,我们将详细探讨这个主题。 首先,SwfUpload的工作原理。它利用了...

Global site tag (gtag.js) - Google Analytics