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类:

 public class ValidateAction extends ActionSupport {
private String name; @Override
public void validate() {
if (name == null || "".equals(name)) {
this.addFieldError("name", "姓名不能为空");
}
} @Override
public String execute() throws Exception {
return SUCCESS;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
}
}

struts.xml配置文件:

 <struts>
<constant name="struts.devMode" value="true" /> <package name="default" namespace="/" extends="struts-default">
<action name="validateAction" class="com.sunny.action.ValidateAction">
<result>/success.jsp</result>
<!--Struts2的校验信息会返回到name值为input的视图中-->
<result name="input">/input.jsp</result>
</action>
</package> </struts>

jsp页面:

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

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

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

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

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

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

       <?xml version="1.0" encoding="UTF-8"?>
      <!DOCTYPE validators PUBLIC
      "-//Apache Struts//XWork Validator 1.0.3//EN"
      "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd">
      <!--validators根元素-->
      <validators>
      <!--field:指定action中要校验的属性
      name:指定将被验证的表单字段的名字
      -->
      <field name="name">
      <!--field-validator:指定验证规则
      type:指定验证规则的名称
      -->
      <field-validator type="requiredstring">
      <!--param:向验证器传递的参数,name值为校验器的参数名 -->
      <param name="trim">true</param>
      <!--message:验证失败时,提示的错误信息
      里面的文本:错误提示信息
      -->
      <message>用户名不能为空</message>
      </field-validator>
      </field>
      </validators>
    • Struts2的内置校验器规则在路径:xwork-core-x.x.x.jar中com.opensymphony.xwork2.validator.validators包的default.xml文件:

       <validators>
      <!--validator:声明验证规则
      name:验证规则的名称
      class:验证规则对应的类的完整路径
      -->
      <!--required:必填校验器,要求被校验的属性值不能为null-->
      <validator name="required" class="com.opensymphony.xwork2.validator.validators.RequiredFieldValidator"/>
      <!--requiredstring:必填字符串校验器,要求被校验的属性值不能为null,并且长度大于0,默认情况下会对字符串去前后空格
      参数trim:该参数为可选参数,用于指定是否在校验之前对字符串进行整理。
      -->
      <validator name="requiredstring" class="com.opensymphony.xwork2.validator.validators.RequiredStringValidator"/>
      <!--int:整数校验器,要求field的整数值必须在指定范围内
      参数min:指定字段值的最小值,该参数为可选
      参数max:指定字段值的最大值,该参数为可选
      -->
      <validator name="int" class="com.opensymphony.xwork2.validator.validators.IntRangeFieldValidator"/>
      <!--long:整数校验器,要求field的整数值必须在指定范围内
      参数min:指定字段值的最小值,该参数为可选
      参数max:指定字段值的最大值,该参数为可选
      -->
      <validator name="long" class="com.opensymphony.xwork2.validator.validators.LongRangeFieldValidator"/>
      <!--short:整数校验器,要求field的整数值必须在指定范围内
      参数min:指定字段值的最小值,该参数为可选
      参数max:指定字段值的最大值,该参数为可选
      -->
      <validator name="short" class="com.opensymphony.xwork2.validator.validators.ShortRangeFieldValidator"/>
      <!--double:双精度浮点数校验器,要求field的双精度浮点数必须在指定范围内
      参数minInclusive:指定字段数值所接受的最小值,该参数为可选
      参数maxInclusive:指定字段数值所接受的最大值,该参数为可选
      参数minExclusive:指定字段数值被排除的最小值,该参数为可选
      参数maxExclusive:指定字段数值被排除的最大值,该参数为可选
      -->
      <validator name="double" class="com.opensymphony.xwork2.validator.validators.DoubleRangeFieldValidator"/>
      <!--date:日期校验器,要求field的日期值必须在指定范围内
      参数min:指定字段日期值的最小值,该参数为可选
      参数max:指定字段日期值的最大值,该参数为可选
      -->
      <validator name="date" class="com.opensymphony.xwork2.validator.validators.DateRangeFieldValidator"/>
      <!--expression:表达式校验器,它是一个非字段校验器,当参数expression计算的值为true时,校验通过,否则返回提示.
      参数expression:该参数为一个逻辑表达式,该参数使用OGNL表达式,并基于值栈计算,返回一个Boolean类型值。
      -->
      <validator name="expression" class="com.opensymphony.xwork2.validator.validators.ExpressionValidator"/>
      <!--fieldexpression:字段表达式校验器,当参数expression计算的值为true时,校验通过,否则返回提示.
      参数expression:该参数为一个逻辑表达式,该参数使用OGNL表达式,并基于值栈计算,返回一个Boolean类型值.
      -->
      <validator name="fieldexpression" class="com.opensymphony.xwork2.validator.validators.FieldExpressionValidator"/>
      <!--email:邮件地址校验器,要求如果被校验的属性值非空,则必须是合法的邮件地址-->
      <validator name="email" class="com.opensymphony.xwork2.validator.validators.EmailValidator"/>
      <!--url:网址校验器,要求如果被校验的属性值非空,则必须是合法的url地址-->
      <validator name="url" class="com.opensymphony.xwork2.validator.validators.URLValidator"/>
      <!--visitor复合类型校验器,该校验器用来校验Action中定义的复合类型属性,支持简单的复合类型或数组类型或集合类型.
      参数context:校验器引用的上下文,可以随意取,可选参数
      参数appendPrefix:是否为字段校验信息加前缀(message中设置的值),可选参数
      -->
      <validator name="visitor" class="com.opensymphony.xwork2.validator.validators.VisitorFieldValidator"/>
      <!--conversion:类型转换校验器,该校验器检查是否存在转换异常
      参数repopulateField:指定当类型转换失败后返回input页面时,类型转换失败的表单是否保留原来的错误输入,true为保留,false为不保留.
      -->
      <validator name="conversion" class="com.opensymphony.xwork2.validator.validators.ConversionErrorFieldValidator"/>
      <!--stringlength:字符串长度校验器,用于检验字段中字符串长度是否在指定的范围
      参数trim:该参数为可选参数,用于指定是否在校验之前对字符串进行整理。
      参数maxLength:用于指定最大字符串长度,该参数为可选
      参数minLength:用于指定最小字符串长度,该参数为可选
      -->
      <validator name="stringlength" class="com.opensymphony.xwork2.validator.validators.StringLengthFieldValidator"/>
      <!--regex:正则表达式校验器,检查被校验的属性值是否匹配一个正则表达式.
      参数expression:指定正则表达式
      参数caseSensitive:指定进行正则表达式匹配时,是否区分大小写,默认值为true,为可选参数.
      -->
      <validator name="regex" class="com.opensymphony.xwork2.validator.validators.RegexFieldValidator"/>
      <validator name="conditionalvisitor" class="com.opensymphony.xwork2.validator.validators.ConditionalVisitorFieldValidator"/>
      </validators>

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

Action类:

 public class ValidateAction extends ActionSupport {
private String name; @Override
public String execute() throws Exception {
return SUCCESS;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
}
}

struts2配置文件:

 <struts>
<constant name="struts.devMode" value="true" /> <package name="default" namespace="/" extends="struts-default">
<action name="validateAction" class="com.sunny.action.ValidateAction">
<result>/success.jsp</result>
<!--Struts2的校验信息会返回到name值为input的视图中-->
<result name="input">/input.jsp</result>
</action>
</package> </struts>

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

 <validators>
<field name="name">
<field-validator type="requiredstring">
<param name="trim">true</param>
<message>姓名不能为空</message>
</field-validator>
</field>
</validators>

jsp页面:

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

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

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

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

3)visitor验证规则示例

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

1)新建Person类:

 public class Person {
private String name; public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} }

2)新建Action类:

 public class ValidateAction extends ActionSupport {
private Person person; @Override
public String execute() throws Exception {
return SUCCESS;
} public Person getPerson() {
return person;
} public void setPerson(Person person) {
this.person = person;
} }

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

 <validators>
<field name="person">
<field-validator type="visitor">
<param name="context">test</param>
<param name="appendPrefix">true</param>
<!--指定校验失败的提示信息前缀-->
<message>错误:</message>
</field-validator>
</field>
</validators>

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

 <validators>
<field name="name">
<field-validator type="requiredstring">
<param name="trim">true</param>
<message>姓名不能为空</message>
</field-validator>
</field>
</validators>

5)新建jsp页面:

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

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

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

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

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

    我们在进行一些操作是需要对用户的输入数据进行验证,比如网站的注册,需要对各个数据项进行数据校验,Struts2提供了一些默认的校验器,比如数字的检测,邮箱的检测,字符串长度的检测等等. 常用的Vali ...

  2. Struts2学习---简单的数据校验、访问Web元素

    1.简单的数据校验 在action里面我们已经给出了一个数据校验: public String execute() { if(user.getUsername().equals("usern ...

  3. Symfony2学习笔记之数据校验

    校验在web应用程序中是一个常见的任务.数据输入到表单需要被校验.数据在被写入数据库之前或者传入一个webservice时也需要被校验. Symfony2 配备了一个Validator 组件,它让校验 ...

  4. Java学习笔记:数据校验

    在后台开发过程中,需要对参数进行校验. validation bean 是基于JSR-303标准开发出来的,使用注解的方式实现,是一套规范,可以实现参数的校验. Hibernate Validator ...

  5. IDA Pro 权威指南学习笔记(九) - 数据搜索

    Search -> Next Code 命令将光标移动到下一个包含指令的位置 Jump -> Jump to Function 命令可以打开所有函数,可以迅速选择一个函数并导航到该函数所在 ...

  6. Struts2学习笔记⑧

    今天是Struts2学习笔记的最后一篇文章了.用什么做结尾呢,这两天其实还学了很多东西,没有记录下,今天就查漏补缺一下. 文件上传与下载.FreeMarker以及昨天没做完的例子 文件上传与下载 文件 ...

  7. Struts2 学习笔记(概述)

    Struts2 学习笔记 2015年3月7日11:02:55 MVC思想 Strust2的MVC对应关系如下: 在MVC三个模块当中,struts2对应关系如下: Model: 负责封装应用的状态,并 ...

  8. vue学习笔记(九)vue-cli中的组件通信

    前言 在上一篇博客vue学习笔记(八)组件校验&通信中,我们学会了vue中组件的校验和父组件向子组件传递信息以及子组件通知父组件(父子组件通信),上一篇博客也提到那是对组件内容的刚刚开始,而本 ...

  9. go微服务框架kratos学习笔记九(kratos 全链路追踪 zipkin)

    目录 go微服务框架kratos学习笔记九(kratos 全链路追踪 zipkin) zipkin使用demo 数据持久化 go微服务框架kratos学习笔记九(kratos 全链路追踪 zipkin ...

随机推荐

  1. Python-WXPY实现微信监控报警

    概述: 本文主要分享一下博主在学习wxpy 的过程中开发的一个小程序.博主在最近有一个监控报警的需求需要完成,然后刚好在学习wxpy 这个东西,因此很巧妙的将工作和学习联系在一起. 博文中主要使用到的 ...

  2. Liunx上传下载和压缩问题分享

    昨天紧急需求需要测试,开发远程发了个包需要部署到生产环境.我通过FileZila连接到服务器,然后把补丁包发送到服务器对应路径,通过CRT操作,进行包的解压.重启. 同时,为了配合开发定位问题,需要从 ...

  3. nodejs之querystring模块

    这里主要记下querystring模块的使用方法. querystring从字面上的意思就是查询字符串,一般是对http请求所带的数据进行解析.querystring模块只提供4个方法,在我看来,这4 ...

  4. Spark Streaming笔记——技术点汇总

    目录 目录 概况 原理 API DStream WordCount示例 Input DStream Transformation Operation Output Operation 缓存与持久化 C ...

  5. Java集合类小结-思维导图

    java集合类分为collection 和 map两类Collection List ArrayList LibnkedList Vector Set HashSet TreeSet LinkedHa ...

  6. JVM学习笔记一:内存管理

    参考资料 本文参考:<深入理解Java虚拟机>作者 周志明 知识产权归作者所有 走近java java组成部分:java语言.各平台虚拟机.Class文件结构.java api 类库.第三 ...

  7. Redux源码分析之createStore

    接着前面的,我们继续,打开createStore.js, 直接看最后, createStore返回的就是一个带着5个方法的对象. return { dispatch, subscribe, getSt ...

  8. Android中的内容提供者

    Android中的内容提供者 为什么需要内容提供者 为了跨程序访问数据.试想如果在App-1中创建了一个私有数据库,App-2是不能直接访问的.因为权限不够,虽然可以使用chmod 777来修改权限, ...

  9. 使用Hibernate模板调用存储过程

    前提是该Dao类已经已经继承了org.springframework.orm.hibernate5.support.HibernateDaoSupport,并且在整个项目中已经配置好了事务,或者是手动 ...

  10. Aspose.Words关于域的应用

    #region 通过word域去插入相应的数据 /// <summary> /// 通过word域去进行指定位置替换数据 /// </summary> public void ...