Struts2学习笔记(九)——数据校验

Struts2的数据校验属于服务器端校验,Struts2 支持校验方式 :

  • 手动校验(代码校验) :在服务器端通过编写java代码,完成数据校验
  • 自动校验(配置校验) :XML配置校验(主流) 和 注解配置校验

1、手动校验

1)Struts2的手动校验步骤:

  • 首先要从页面中获取对应的标签name属性的值,在动作类action中声明同名的属性,提供get和set方法;
  • 要继承ActionSupport类或者实现Validateable接口;
  • 重写Validateable接口的validate()方法,需要通过addFieldError(fieldName, errorMessage)方法来添加校验提示,fieldName为错误提示字段,errorMessage为错误提示信息,在jsp页面需要通过Struts2的<s:fielderror/>标签来提示添加的信息,该标签有个name属性,值为addFieldError方法中的fieldName,当添加了校验信息,Struts2框架会返回到name值为"input"的<result/>设置的视图中;

2)下面我们通过一个例子来演示手动校验功能:

Action类:

 1 public class ValidateAction extends ActionSupport {
 2     private String name;
 3
 4     @Override
 5     public void validate() {
 6         if (name == null || "".equals(name)) {
 7             this.addFieldError("name", "姓名不能为空");
 8         }
 9     }
10
11     @Override
12     public String execute() throws Exception {
13         return SUCCESS;
14     }
15
16     public String getName() {
17         return name;
18     }
19
20     public void setName(String name) {
21         this.name = name;
22     }
23 }

struts.xml配置文件:

 1 <struts>
 2     <constant name="struts.devMode" value="true" />
 3
 4     <package name="default" namespace="/" extends="struts-default">
 5         <action name="validateAction" class="com.sunny.action.ValidateAction">
 6             <result>/success.jsp</result>
 7             <!--Struts2的校验信息会返回到name值为input的视图中-->
 8             <result name="input">/input.jsp</result>
 9         </action>
10     </package>
11
12 </struts>

jsp页面:

1 <body>
2  <s:fielderror name="name"/>
3  <form action="${pageContext.servletContext.contextPath}/validateAction.action">
4     姓名:<input type="text" name="name"><br>
5     <input type="submit" value="提交">
6  </form>
7 </body>

当第一次加载jsp页面时不会显示校验信息:

当在表单中不添加任何信息直接点击提交按钮时会显示设置的校验信息:

2、自动校验(XML配置文件方式)

1)XML配置文件方式数据校验步骤:

  • 首先要从页面中获取对应的标签name属性的值,在动作类action中声明同名的属性,提供get和set方法;
  • 创建一个XML格式验证文件,文件的命名方式:ActionClassName-validation.xml,ActionClassName指的是Action类的名称,该文件需要和Action类放在同一目录下;
    • XML格式验证文件的内容格式:

       1 <?xml version="1.0" encoding="UTF-8"?>
       2 <!DOCTYPE validators PUBLIC
       3           "-//Apache Struts//XWork Validator 1.0.3//EN"
       4           "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd">
       5 <!--validators根元素-->
       6 <validators>
       7     <!--field:指定action中要校验的属性
       8             name:指定将被验证的表单字段的名字
       9      -->
      10     <field name="name">
      11         <!--field-validator:指定验证规则
      12                 type:指定验证规则的名称
      13          -->
      14         <field-validator type="requiredstring">
      15             <!--param:向验证器传递的参数,name值为校验器的参数名 -->
      16             <param name="trim">true</param>
      17             <!--message:验证失败时,提示的错误信息
      18                 里面的文本:错误提示信息,<![CDATA[]]>:保证按原文输出
      19              -->
      20             <message>用户名不能为空</message>
      21         </field-validator>
      22     </field>
      23 </validators>
    • Struts2的内置校验器规则在路径:xwork-core-x.x.x.jar中com.opensymphony.xwork2.validator.validators包的default.xml文件:
       1 <validators>
       2     <!--validator:声明验证规则
       3             name:验证规则的名称
       4             class:验证规则对应的类的完整路径
       5      -->
       6     <!--required:必填校验器,要求被校验的属性值不能为null-->
       7     <validator name="required" class="com.opensymphony.xwork2.validator.validators.RequiredFieldValidator"/>
       8     <!--requiredstring:必填字符串校验器,要求被校验的属性值不能为null,并且长度大于0,默认情况下会对字符串去前后空格
       9             参数trim:该参数为可选参数,用于指定是否在校验之前对字符串进行整理。
      10     -->
      11     <validator name="requiredstring" class="com.opensymphony.xwork2.validator.validators.RequiredStringValidator"/>
      12     <!--int:整数校验器,要求field的整数值必须在指定范围内
      13             参数min:指定字段值的最小值,该参数为可选
      14             参数max:指定字段值的最大值,该参数为可选
      15     -->
      16     <validator name="int" class="com.opensymphony.xwork2.validator.validators.IntRangeFieldValidator"/>
      17     <!--long:整数校验器,要求field的整数值必须在指定范围内
      18             参数min:指定字段值的最小值,该参数为可选
      19             参数max:指定字段值的最大值,该参数为可选
      20     -->
      21     <validator name="long" class="com.opensymphony.xwork2.validator.validators.LongRangeFieldValidator"/>
      22     <!--short:整数校验器,要求field的整数值必须在指定范围内
      23             参数min:指定字段值的最小值,该参数为可选
      24             参数max:指定字段值的最大值,该参数为可选
      25     -->
      26     <validator name="short" class="com.opensymphony.xwork2.validator.validators.ShortRangeFieldValidator"/>
      27     <!--double:双精度浮点数校验器,要求field的双精度浮点数必须在指定范围内
      28             参数minInclusive:指定字段数值所接受的最小值,该参数为可选
      29             参数maxInclusive:指定字段数值所接受的最大值,该参数为可选
      30             参数minExclusive:指定字段数值被排除的最小值,该参数为可选
      31             参数maxExclusive:指定字段数值被排除的最大值,该参数为可选
      32     -->
      33     <validator name="double" class="com.opensymphony.xwork2.validator.validators.DoubleRangeFieldValidator"/>
      34     <!--date:日期校验器,要求field的日期值必须在指定范围内
      35             参数min:指定字段日期值的最小值,该参数为可选
      36             参数max:指定字段日期值的最大值,该参数为可选
      37     -->
      38     <validator name="date" class="com.opensymphony.xwork2.validator.validators.DateRangeFieldValidator"/>
      39     <!--expression:表达式校验器,它是一个非字段校验器,当参数expression计算的值为true时,校验通过,否则返回提示.
      40             参数expression:该参数为一个逻辑表达式,该参数使用OGNL表达式,并基于值栈计算,返回一个Boolean类型值。
      41     -->
      42     <validator name="expression" class="com.opensymphony.xwork2.validator.validators.ExpressionValidator"/>
      43     <!--fieldexpression:字段表达式校验器,当参数expression计算的值为true时,校验通过,否则返回提示.
      44             参数expression:该参数为一个逻辑表达式,该参数使用OGNL表达式,并基于值栈计算,返回一个Boolean类型值.
      45     -->
      46     <validator name="fieldexpression" class="com.opensymphony.xwork2.validator.validators.FieldExpressionValidator"/>
      47     <!--email:邮件地址校验器,要求如果被校验的属性值非空,则必须是合法的邮件地址-->
      48     <validator name="email" class="com.opensymphony.xwork2.validator.validators.EmailValidator"/>
      49     <!--url:网址校验器,要求如果被校验的属性值非空,则必须是合法的url地址-->
      50     <validator name="url" class="com.opensymphony.xwork2.validator.validators.URLValidator"/>
      51     <!--visitor复合类型校验器,该校验器用来校验Action中定义的复合类型属性,支持简单的复合类型或数组类型或集合类型.
      52             参数context:校验器引用的上下文,可以随意取,可选参数
      53             参数appendPrefix:是否为字段校验信息加前缀(message中设置的值),可选参数
      54     -->
      55     <validator name="visitor" class="com.opensymphony.xwork2.validator.validators.VisitorFieldValidator"/>
      56     <!--conversion:类型转换校验器,该校验器检查是否存在转换异常
      57             参数repopulateField:指定当类型转换失败后返回input页面时,类型转换失败的表单是否保留原来的错误输入,true为保留,false为不保留.
      58     -->
      59     <validator name="conversion" class="com.opensymphony.xwork2.validator.validators.ConversionErrorFieldValidator"/>
      60     <!--stringlength:字符串长度校验器,用于检验字段中字符串长度是否在指定的范围
      61             参数trim:该参数为可选参数,用于指定是否在校验之前对字符串进行整理。
      62             参数maxLength:用于指定最大字符串长度,该参数为可选
      63             参数minLength:用于指定最小字符串长度,该参数为可选
      64     -->
      65     <validator name="stringlength" class="com.opensymphony.xwork2.validator.validators.StringLengthFieldValidator"/>
      66     <!--regex:正则表达式校验器,检查被校验的属性值是否匹配一个正则表达式.
      67             参数expression:指定正则表达式
      68             参数caseSensitive:指定进行正则表达式匹配时,是否区分大小写,默认值为true,为可选参数.
      69     -->
      70     <validator name="regex" class="com.opensymphony.xwork2.validator.validators.RegexFieldValidator"/>
      71     <validator name="conditionalvisitor" class="com.opensymphony.xwork2.validator.validators.ConditionalVisitorFieldValidator"/>
      72 </validators>

2)下面我们通过一个例子来演示XML配置文件方式数据校验功能:

Action类:

 1 public class ValidateAction extends ActionSupport {
 2     private String name;
 3
 4     @Override
 5     public String execute() throws Exception {
 6         return SUCCESS;
 7     }
 8
 9     public String getName() {
10         return name;
11     }
12
13     public void setName(String name) {
14         this.name = name;
15     }
16 }

struts2配置文件:

 1 <struts>
 2     <constant name="struts.devMode" value="true" />
 3
 4     <package name="default" namespace="/" extends="struts-default">
 5         <action name="validateAction" class="com.sunny.action.ValidateAction">
 6             <result>/success.jsp</result>
 7             <!--Struts2的校验信息会返回到name值为input的视图中-->
 8             <result name="input">/input.jsp</result>
 9         </action>
10     </package>
11
12 </struts>

在Action类相同目录下新建XML格式验证文件:ValidateAction-validation.xml:

1 <validators>
2     <field name="name">
3         <field-validator type="requiredstring">
4             <param name="trim">true</param>
5             <message>姓名不能为空</message>
6         </field-validator>
7     </field>
8 </validators>

jsp页面:

1 <body>
2  <s:fielderror name="name"/>
3  <form action="${pageContext.servletContext.contextPath}/validateAction.action">
4     姓名:<input type="text" name="name"><br>
5     <input type="submit" value="提交">
6  </form>
7 </body>

当第一次加载jsp页面时不会显示校验信息:

当在表单中不添加任何信息直接点击提交按钮时会显示设置的校验信息:

如果要对指定方法进行验证的话,XML验证文件的命名方式:ActionClassName-ActionName-validation.xml,ActionName对应的是struts.xml文件对应的action标签的name属性的值。

3)visitor验证规则示例

vsitor校验器主要用于校验Action里的复合类型、数组类型或者集合类型,如一个Action里面包含了Person类型的属性,需要验证Person类型的name属性不能为空。

1)新建Person类:

 1 public class Person {
 2     private String name;
 3
 4     public String getName() {
 5         return name;
 6     }
 7
 8     public void setName(String name) {
 9         this.name = name;
10     }
11
12 }

2)新建Action类:

 1 public class ValidateAction extends ActionSupport {
 2     private Person person;
 3
 4     @Override
 5     public String execute() throws Exception {
 6         return SUCCESS;
 7     }
 8
 9     public Person getPerson() {
10         return person;
11     }
12
13     public void setPerson(Person person) {
14         this.person = person;
15     }
16
17 }

3)新建visitor验证规则文件,该文件需要和Action类在同一目录下,命名规则和上面讲的一样ActionClassName-validation.xml,这里为ValidateAction-validation.xml:

 1 <validators>
 2     <field name="person">
 3         <field-validator type="visitor">
 4             <param name="context">test</param>
 5             <param name="appendPrefix">true</param>
 6             <!--指定校验失败的提示信息前缀-->
 7             <message>错误:</message>
 8         </field-validator>
 9     </field>
10 </validators>

4)新建Person类的name属性验证规则文件,该文件需要和Person类在同一目录下,命名规则为ClassName-context值-validation.xml,ClassName为要验证的类,context值为<param name="context">test</param>中的内容,-validation为固定内容,这里的文件名为Person-test-validation.xml:

1 <validators>
2     <field name="name">
3         <field-validator type="requiredstring">
4             <param name="trim">true</param>
5             <message>姓名不能为空</message>
6         </field-validator>
7     </field>
8 </validators>

5)新建jsp页面:

1 <body>
2  <s:fielderror name="name"/>
3  <form action="${pageContext.servletContext.contextPath}/validateAction.action">
4     姓名:<input type="text" name="person.name"><br>
5     <input type="submit" value="提交">
6  </form>
7 </body>

当第一次加载jsp页面时不会显示校验信息:

当在表单中不添加任何信息直接点击提交按钮时会显示设置的校验信息:

时间: 2024-12-17 00:24:51

Struts2学习笔记(九)——数据校验的相关文章

Symfony2学习笔记之数据校验

校验在web应用程序中是一个常见的任务.数据输入到表单需要被校验.数据在被写入数据库之前或者传入一个webservice时也需要被校验. Symfony2 配备了一个Validator 组件,它让校验工作变得简单易懂.该组件是基于JSR303 Bean校验规范.一个Java规范用在PHP中. 基本验证理解校验的最好方法是看它的表现.首先,假设你已经创建了一个用于你应用程序某个地方的PHP对象. //src/Acme/BlogBundle/Entity/Author.php namespace A

struts2学习笔记--使用Validator校验数据

我们在进行一些操作是需要对用户的输入数据进行验证,比如网站的注册,需要对各个数据项进行数据校验,Struts2提供了一些默认的校验器,比如数字的检测,邮箱的检测,字符串长度的检测等等. 常用的Validator 校验器 作用  required  必填校验器,要求字段必须有值  requiredstring 必填字符串校验器,要求必须有值且长度大于0,即不能是空字符串.默认会去掉字符串前后空格 参数fieldName:该参数指定校验的字段名称,如果是字段校验,则不用指定该参数 参数trim:该参

Struts2学习笔记(九):Strut2通用标签详解

本节主要介绍Strus2中的通用标签,主要有<s:url>, <s:set>, <s:push>, <s:if>, <s:elseif>, <s:else>, <s:iterator>, <s:sort>, <s:date>, <s:a>等几个标签的具体用法,仍然采用代码加注释的形式进行说明,希望能对大家有帮助. 刚入门的朋友阅读本文前,请阅读: Struts2学习笔记(六):值栈(va

struts2 学习笔记

Struts2 学习笔记 在使用J2EE编写网站的时候,我们经常会使用Struts2框架.Struts2的好处就是许多东西已经被封装好了,我们只需要包含给定的jar文件,就能够调用相应的方法和标签.下面我将简要介绍一下Struts2的使用和特点: 一.搭建Struts2的环境:(主要分为三个部分:包含lib文件.web.xml改写.新建一个Struts.xml) 1.打开myeclise软件,新建一个Dynamic web project,在WebContent/WEB-INF文件夹下的lib文

Struts2 学习笔记(概述)

Struts2 学习笔记 2015年3月7日11:02:55 MVC思想 Strust2的MVC对应关系如下: 在MVC三个模块当中,struts2对应关系如下: Model: 负责封装应用的状态,并实现应用的功能.通常分为数据模型和业务逻辑模型,数据模型用来存放业务数据,比如订单信息.用户信息等:而业务逻辑模型包含应用的业务操作,比如订单的添加或者修改等. 封装应用状态:某些应用数据封装起来,使得视图只能通过接口获取对应的数据 响应状态查询:对应用的状态改变进行处理 暴露应用功能:暴露接口 通

struts2学习笔记(一)

一.struts2和struts1的区别 1.Action类 a) Struts1要求Action类继承于一个抽象类,Struts1普遍使用抽象类编程而不是接口 b) Struts2的Action类可以实现一个Action接口,也可以实现其他接口,使可选和定制的服务成为可能.Struts2提供一个ActionSupport基类去实现常用的接口.Action接口不是必须的,任何有execute标识的POJO对象都可以作为Struts2的Action对象. 2.线程模式 a) Struts1的Act

struts2学习笔记(7)------------ognl表达式

OGNL表达式(Object-Graph Navigation Language),大概可以理解为:对象图形化导航语言.是一种可以方便地操作对象属性的开源表达式语言. Struts2自行维护一个特定范围的"银行",Action将数据放入其中,而JSP页面可从中取数据,表面上似乎看起来像是jsp可以直接访问Action数据.. 当Action属性不再是简单的值,而是某个对象,数组,集合时,就需要使用ognl表达式来访问这些对象,数组,集合内的数据了. 1)ognl的stack Conte

APUE 学习笔记(九) 高级I/O

1. 非阻塞I/O 低速系统调用时可能会使进程永远阻塞的一类系统调用,包括以下调用: (1)某些文件类型你(网络socket套接字.终端设备.管道)暂无可使用数据,则读操作可能会使调用者永远阻塞 (2)如果数据不能立即被(1)中文件类型接受,则写操作会使调用者永远阻塞 (3)某些进程间通信函数 非阻塞I/O使我们可以调用open.read.write这样的I/O操作,并使这些操作不会永远阻塞,如果这种操作不能完成,则调用立即出错返回 对于一个给定的文件有两种方法对其指定非阻塞I/O: (1)调用

struts2学习笔记(5)----------配置result

Action只负责处理请求,负责生成响应的视图组件,一般是JSP页面,而Action为JSP页面提供显示的数据.Action处理请求结束后,控制器根据<result>元素配置的逻辑视图跟物理视图之间的关系来响应. 浏览器,控制器和视图资源的顺序图如下: 如图所示,Action处理完一个请求后,并未直接把请求转发给任何具体的视图资源,而是返回给一个逻辑视图,struts2框架收到这个逻辑视图后,把请求转发到对应的物理视图资源,试图资源将结果呈现给用户. 1)result基本配置 struts2提