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 ...
随机推荐
- CentOS 6.5 下安装 Redis 2.8.7(转载)
wget http://download.redis.io/redis-stable.tar.gz tar xvzf redis-stable.tar.gz cd redis-stable make ...
- MySQL 启动参数说明及性能优化建议
[mysqld] port = 3306 serverid = 1 socket = /tmp/mysql.sock skip-name-resolve #禁止MySQL对外部连接进行DNS解析,使用 ...
- phpstudy连接SQL Server 2008数据库 以及 php使用sql server出现乱码解决方式
开始也尝试自己配置php安装环境,找到一个详细的百度经验http://jingyan.baidu.com/article/154b46315242b328ca8f4101.html,前面有问题也一一去 ...
- redis 订阅与发布
PUBLISH,SUBSCRIBE,等命令实现订阅与发布 订阅/发布到频道 订阅/发布到模式 频道的订阅与信息发送 订阅subscribe,可以让客户端订阅任意数量的频道, 每当有新信息发送到 ...
- JavaBean和jsp的开发模型
1.实体类 package com.zdsofe.javaBean.work; public class Student { public String name; public String sex ...
- Stacked Regression的详细步骤和使用注意事项
声明:这篇博文是我基于一篇网络文章翻译的,并结合了自己应用中的一些心得,如果有侵权,请联系本人删除. 最近做推荐的时候,开始接触到Stacking方法,在周志华老师的西瓜书中,Stacking方法是在 ...
- iOS上机题(附个人见解)
##机试题目如下 用命令行创建一个以CocoaPods管理的项目[Test-你的姓名拼音],新建3个ViewController,完成以下题目 将下面的问题在一个UITabView里面列出所有问题,单 ...
- JavaScript中的数组Array方法
push(),pop()方法 push(),pop()方法也叫栈方法,push()可以理解成,向末尾推入,而pop()恰好相反,可以理解成从末尾移除(取得). var nums=[1,2,3,4]; ...
- python--DenyHttp项目(1)--socket编程:客户端与服务器端
查找了许多资料,实现了客户端与服务器端的连接,通过虚拟机进行测试 服务器端IP:192.168.37.129 端口1122 客户端IP: 192.168.37.1 端口1122 Server: #co ...
- NYOJ--491--dfs(打表水过)--幸运三角形
/* Name: NYOJ--491--幸运三角形 Author: shen_渊 Date: 15/04/17 16:26 Description: DFS超时,深搜出第一行的所有情况,计算之后打表水 ...