1、编写校验规则文件
(<ActionName>-validation.xml),文件放在Action类文件相同的路径下校验失败返回input的result。
<validators>
<!-- 校验Action的name属性 -->
<field name="name">
<!-- 指定name属性必须满足必填规则 -->
<field-validator type="requiredstring">
<param name="trim">true</param>
<message key="name.requried"/> <!--国际化信息(国际化资源文件中有name.requried=必须输入用户名)-->
</field-validator>
<!-- 指定name属性必须匹配正则表达式 -->
<field-validator type="regex">
<param name="regex"><![CDATA[(\w{4,25})]]></param>
<message key="name.regex"/>
</field-validator>
</field>
<!-- 指定age属性必须在指定范围内-->
<field name="age">
<field-validator type="int">
<param name="min">1</param>
<param name="max">150</param>
<message key="age.range"/>
</field-validator>
</field>
<!-- 指定birth属性必须在指定范围内-->
<field name="birth">
<field-validator type="date">
<!-- 下面指定日期字符串时,必须使用本Locale的日期格式 -->
<param name="min">1900-01-01</param>
<param name="max">2050-02-21</param>
<message key="birth.range"/>
</field-validator>
</field>
</validators>
2、使用客户端校验
1)将输入页面表单元素改为使用Struts2标签来生成表单。
2)为该<s:form../>元素增加validate=“true”属性。
<s:fielderror/>
<s:form action="regist" validate="true">
<s:textfield name="name" label="用户名"/>
<s:textfield name="pass" label="密码"/>
<s:textfield name="age" label="年龄"/>
<s:textfield name="birth" label="生日"/>
<s:submit value="注册"/>
</s:form>
客户端校验仍然是基于JavaScript的,因为JS本身的限制,有些服务器端校验不能转换成客户端校验。
客户端校验仅支持下面几种:
required validator必填校验器
requiredstring validator必填字符串校验器
stringlength validator字符串长度校验器
regex validator表达式校验器
email validator邮件校验器
url validator网址校验器
int validator整数校验器
double validator双精度
客户端校验需要注意:
不要将<s:form../>元素的theme属性指定为simple
浏览器直接访问启用客户端校验的表单页会引发异常,可把这些表单放WEB-INF下,通过核心Filter后再访问
如果客户端校验需要输出国际化提示信息,则需要使用全局国际化资源文件,不能使用Action范围的文件
启用客户端校验的表单页面的action和namespace要分开写(<s:form action="regist" namespace="/wj"> not <s:form action="wj/regist">)
3、校验器配置风格
字段校验器风格
参考1里面的校验文件
非字段校验器风格
<!-- 配置指定必填字符串的校验器 -->
<validator type="requiredstring">
<!-- 使用该校验器校验name属性 -->
<param name="fieldName">name</param>
<param name="trim">true</param>
<!-- 指定校验失败后输出name.required对应的国际化信息 -->
<message key="name.requried"/>
</validator>
<!-- 配置指定正则表达式的校验器 -->
<validator type="regex">
<!-- 使用该校验器校验name属性 -->
<param name="fieldName">name</param>
<param name="trim">true</param>
<param name="regex"><![CDATA[(\w{4,25})]]></param>
<!-- 指定校验失败后输出name.required对应的国际化信息 -->
<message key="name.regex"/>
</validator>
4、短路校验器
<field-validator type="requiredstring" short-circuit="true">
5、校验文件搜索规则
遇到下列情况时:
<action name="*Pro" class="org.crazyit.app.action.RegistAction"
method="{1}">
解决方案:
为校验规则文件添加Action别名来指定需要校验的处理逻辑:
<ActionClassName>-<ActionAliasName>-validation.xml
假设系统有两个Action:BaseAction和RegistAction,RegistAction继承了BaseAction,系统搜索文件顺序如下:
1)BaseAction-validation.xml
2)BaseAction-别名-validation.xml
3)RegistAction-Validation.xml
4)RegistAction-别名-validation.xml
搜索到第一个校验文件后,还会继续搜索。
搜索从上到下,实际规则是所有规则总和,有冲突时,以后面规则为准。
6、校验顺序和短路
校验器执行顺序有如下原则:
先非字段风格校验器,再字段;排在前面的先执行。
校验器短路原则:
所有非字段校验器优先,某个非字段校验器失败,对应字段的字段校验器不再校验,其他非字段校验器仍要执行,字段校验器失败后的其他字段校验器不会执行。
7、内建校验器
Struts2包下xwork-2.3.16.3.jar中com\opensymphony\xwork2\validator\validators 下的default.xml文件。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC
"-//Apache Struts//XWork Validator Definition 1.0//EN"
<!-- START SNIPPET: validators-default -->
<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>
<!-- END SNIPPET: validators-default -->
8、基于注解的输入校验
可以简化开发,但是会给维护带来一定的困难
// 使用注解指定必填、正则表达式两个校验规则
@RequiredStringValidator(key = "name.requried"
, message = "")
@RegexFieldValidator(regex = "\\w{4,25}"
,key = "name.regex" , message = "")
public void setName(String name)
{
this.name = name;
}
// age的setter和getter方法
@IntRangeFieldValidator(message = ""
, key = "age.range", min = "1"
, max = "150")
public void setAge(int age)
{
this.age = age;
}
// birth的setter和getter方法
@DateRangeFieldValidator(message = ""
, key = "birth.range", min = "1900/01/01"
, max = "2050/01/21")
public void setBirth(Date birth)
{
this.birth = birth;
}
9、手动完成输入校验
1)重写validate()方法
2)重写validateXxx方法
10、Struts2输入校验步骤
1)类型转换器对字符串的请求参数执行类型转换,并将这些值设置为Action属性值。
2)类型转换过程中如果出现异常,将异常信息保存到ActionContext中,conventionError拦截器负责将其封装到FieldError里。
3)使用Struts2中配置的校验器进行输入校验。
4)通过反射调用validateXxx()方法。
5)调用validate()方法。
6)若没有出现FieldError时调用Action里的处理方法,出现了则转入input逻辑视图所指定的视图资源。
- 笔记:Struts2 输入校验
Struts2的输入校验包含了客户端校验和服务器端校验,通过编写校验规则文件来实现输入校验,需要增加 Convention 插件,将 struts2-convention-plugin-2.3.31. ...
- Struts2输入校验(XML方式)
本章主要介绍struts2的XML配置方式输入校验.以下将结合一个实例程序进行说明. 代码结构: 关键代码: RegistAction.javapackage com.alfred.regist.ac ...
- Struts2输入校验(编码方式)
struts2对用户输入数据的校验方法有两种方式,一种是通过编码的方式,另一种则是通过使用XML配置方式. 本章主要介绍struts2编码方式的输入校验.以下将结合一个实例程序进行说明. 代码结构: ...
- Struts2 输入校验 第四弹
ActionSupport 里面有一个validate.可以重写里面你的方法. 校验执行流程: 1)首先进行类型转化 2)然后进行输入校验(执行validate方法) 3)如果在上述过程中出现了任何错 ...
- Struts2 输入校验(使用编码方式)
一.Struts输入校验 1.创建register.jsp <%@ page language="java" contentType="text/html; cha ...
- struts2对action中的方法进行输入校验(2)
struts2输入校验流程: 1.类型转换器对请求參数运行类型转换,并把转换后的值赋给aciton中的属性 2.假设在运行类型转换的过程中出现异常,系统会将异常信息保存到ActionContext, ...
- JavaWeb框架_Struts2_(六)----->Struts2的输入校验
1. 输入校验章节目录 输入校验概述 客户端校验 服务器端校验 手动编程校验 重写validate方法 重写validateXxx()方法 输入校验流程 校验框架校验 Struts2 内置的校验器 常 ...
- Struts 2(五):输入校验 & 校验框架
第一节 Struts2输入校验 1.1 输入校验的重要性 输入校验分为客户端校验和服务器端校验.客户端校验用来过滤用户的错误操作,一般使用JavaScript代码实现.服务器端校验用来防止非法用户的恶 ...
- Struts2的输入校验(2)——客户端校验
Struts2的输入校验(2) --客户端校验 Struts2客户端校验的使用: (1)使用Struts2的标签生成输入页面的表单: (2)为该<s:form>元素添加validate=& ...
随机推荐
- 2 weekend110的hadoop的自定义排序实现 + mr程序中自定义分组的实现
我想得到按流量来排序,而且还是倒序,怎么达到实现呢? 达到下面这种效果, 默认是根据key来排, 我想根据value里的某个排, 解决思路:将value里的某个,放到key里去,然后来排 下面,开始w ...
- CSS备忘笔记
一.CSS的概念 CSS(Cascading Style Sheet),中文译为层叠样式表,它是用于控制网页样式并允许将样式信息与网页内容分离的一种标记性语言. 二.CSS使用方式 使用CSS控制页面 ...
- fzu 2135 数字游戏 【水题】
Problem 2135 数字游戏 Accept: 253 Submit: 392Time Limit: 1000 mSec Memory Limit : 32768 KB Problem ...
- Visual Studio 2015安装过程卡住,解决办法
Visual Studio 2015安装过程中卡住的情况有很多,我遇到的是卡在安装windows 更新KB2999226,解决办法 手动安装此更新包,位置在Visual Studio的安装包中,目录: ...
- Java-工厂设计模式
引言: 工厂设计模式分为三种: 简单工厂 工厂方法 抽象工厂 联想四种情况 (1).还没有工厂时代:假如还没有工业革命,如果一个客户要一件产品,一般的做法是客户去创建一件产品,然后拿来用. (2).简 ...
- [Webpack 2] Hashing with Webpack for long term caching
Leveraging the browser cache is an important part of page load performance. A great way to utilize t ...
- view中的setTag和getTag方法的理解
下面是一段自定义适配器中的getView方法,其中使用了view的一个setTag和getTag方法 View中的setTag(Onbect)表示给View添加一个格外的数据(相当于缓存),以后可以用 ...
- thinking in java 读书笔记 --- overriding private method
一个对象可以被用作它自身的类型或者是它的基类类型.当用作它的基类类型时叫做upcasting,如下所示 BaseClass ref = new DerivedClass() //upcasting ...
- Android(java)学习笔记183:判断SD卡状态和存储空间大小
当我们在使用SD卡时候,如果我们想往SD卡里读写数据,我们必须在这之前进行一个逻辑判断,那就是判断SD卡状态和SD存储空间大小: 核心代码: String status = Environment.g ...
- System Operations on AWS - Lab 2 - Configuring VPC
建立包含Public和Private子网的VPC,建立Internet Gateway,建立Public和Private子网的路由表,创建NAT和Bastion EC2实例 1. 配置你的私有虚拟云 ...