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类:
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>
- XML格式验证文件的内容格式:
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学习笔记(九)——数据校验的更多相关文章
- struts2学习笔记--使用Validator校验数据
我们在进行一些操作是需要对用户的输入数据进行验证,比如网站的注册,需要对各个数据项进行数据校验,Struts2提供了一些默认的校验器,比如数字的检测,邮箱的检测,字符串长度的检测等等. 常用的Vali ...
- Struts2学习---简单的数据校验、访问Web元素
1.简单的数据校验 在action里面我们已经给出了一个数据校验: public String execute() { if(user.getUsername().equals("usern ...
- Symfony2学习笔记之数据校验
校验在web应用程序中是一个常见的任务.数据输入到表单需要被校验.数据在被写入数据库之前或者传入一个webservice时也需要被校验. Symfony2 配备了一个Validator 组件,它让校验 ...
- Java学习笔记:数据校验
在后台开发过程中,需要对参数进行校验. validation bean 是基于JSR-303标准开发出来的,使用注解的方式实现,是一套规范,可以实现参数的校验. Hibernate Validator ...
- IDA Pro 权威指南学习笔记(九) - 数据搜索
Search -> Next Code 命令将光标移动到下一个包含指令的位置 Jump -> Jump to Function 命令可以打开所有函数,可以迅速选择一个函数并导航到该函数所在 ...
- Struts2学习笔记⑧
今天是Struts2学习笔记的最后一篇文章了.用什么做结尾呢,这两天其实还学了很多东西,没有记录下,今天就查漏补缺一下. 文件上传与下载.FreeMarker以及昨天没做完的例子 文件上传与下载 文件 ...
- Struts2 学习笔记(概述)
Struts2 学习笔记 2015年3月7日11:02:55 MVC思想 Strust2的MVC对应关系如下: 在MVC三个模块当中,struts2对应关系如下: Model: 负责封装应用的状态,并 ...
- vue学习笔记(九)vue-cli中的组件通信
前言 在上一篇博客vue学习笔记(八)组件校验&通信中,我们学会了vue中组件的校验和父组件向子组件传递信息以及子组件通知父组件(父子组件通信),上一篇博客也提到那是对组件内容的刚刚开始,而本 ...
- go微服务框架kratos学习笔记九(kratos 全链路追踪 zipkin)
目录 go微服务框架kratos学习笔记九(kratos 全链路追踪 zipkin) zipkin使用demo 数据持久化 go微服务框架kratos学习笔记九(kratos 全链路追踪 zipkin ...
随机推荐
- POJ 1470 Closest Common Ancestors(最近公共祖先 LCA)
POJ 1470 Closest Common Ancestors(最近公共祖先 LCA) Description Write a program that takes as input a root ...
- Java虚拟机:JVM内存分代策略
版权声明:本文为博主原创文章,转载请注明出处,欢迎交流学习! Java虚拟机根据对象存活的周期不同,把堆内存划分为几块,一般分为新生代.老年代和永久代(对HotSpot虚拟机而言),这就是JVM的内存 ...
- 第一篇:webservice初探
接触webservice也有一段时间了,为了查缺补漏,把知识点系统化,准备写几篇博文梳理下webservice的知识点,这是第一篇,对webservice进行大致的介绍. 1.什么是webservic ...
- 把int型非负数转换为英文
数字转换为英文 输入为int型非负数,最大值为2^31 - 1 = 2 147 483 647 输出为String英文,最大输出为Two Billion One Hundred Forty Seven ...
- 有关Android插件化思考
最近几年移动开发业界兴起了「 插件化技术 」的旋风,各个大厂都推出了自己的插件化框架,各种开源框架都评价自身功能优越性,令人目不暇接.随着公司业务快速发展,项目增多,开发资源却有限,如何能在有限资源内 ...
- getcomputedstyle()获取border像素差异问题
getComputedStyle()方法返回的是一个CSS样式声明对象--CSSStyleDeclaration对象(与style属性的类型相同),包含当前元素所有最终使用的CSS属性值: <! ...
- vue2中component父子组件传递数据props的使用
子组件使用父亲传过来的数据,我们需要通过子组件的 props 选项. 组件实例的作用域是孤立的,不能在子组件的模板内直接引用父组件的数据.修改父亲传过来的props数据的时候 父亲必须传递对象,否则不 ...
- SetConsoleTextAttribute 函数--设置控制台文本属性
SetConsoleTextAttribute函数 来源:https://msdn.microsoft.com/en-us/library/windows/desktop/ms686047(v=vs. ...
- Java第三次上课课堂试验博文
1.Java字段初始化的规律: 运行如下所示的代码 package demo; public class InitializeBlockDemo { /** * @param args */ publ ...
- ES2017中的async函数
前面的话 ES2017标准引入了 async 函数,使得异步操作变得更加方便.本文将详细介绍async函数 概述 async 函数是 Generator 函数的语法糖 使用Generator 函数,依 ...