Struts2Validator
Struts2验证框架
Updated Jun 18, 2010 by cm2...@https://www.wendangku.net/doc/2c3731853.html, Action配置中一定要设置input返回页面
添加验证只要创建验证的xml文件
1.创建xml文件名
验证Action中全部方法
在Action同包下,创建:Action类名-validation.xml
如:ValidateAction创建ValidateAction-validation.xml
验证Action中单个方法
注意事项
注意:
1.要验证的方法不能叫input.
2.这样配置在form表单中要在
不能写action="validate_",然后
这样会找不到对应的配置文件,跳过验证.
3.如果验证出错,返回input页面时,那些存在ValueStack中的值会丢失,可以将Action实现Preparable接口,
然后prepare()方法里初始化添加页面需要的值.
4.如果使用Preparable接口,必须在action配置中添加 name="paramsPrepareParamsStack"/>. 这样prepare()才能得到form提交的参数. 2.创建xml内容 "https://www.wendangku.net/doc/2c3731853.html,/xwork/xwork-validator-1.0.2.dtd"> true Invalid MAIL Struts内建验证程序(type的值) required 保证字段的值不是空值null.空字符串不是空值null. requiredstring 保证字段不是空值null,也不是空白(empty). param:trim(boolean) ->true->去除前后空格 true false int 验证字段值是否可以转换为一个整数. param: min(int);max(int) 1999 2010 date 验证给定日期字段的值是否在一个给定的范围内. param:max(date);min(date) 1999-01-01 2010-01-01 email 给定的String值是否是一个电子邮件地址 url 给定的String值是否是一个合法的URL(要有前缀) expression,fieldexpression 验证给定字段是否满足一个OGNL表达式. 区别:expression 不是一个字段验证程序,失败时将生成一个动作错误.(JSP中调用 fieldexpression 是一个字段验证程序,失败时将抛出一个字段错误.(对字段验证) param:expression(String)OGNL表达式 expression: public class ExpressionTestAction{ //属性生成get,set private int min; private int max; } max > min Maximum temperature must be greater than Minimum temperature fieldexpression: public class FieldExpressionTestAction{ //属性生成get,set private int min; private int max; } max > min Maximum temperature must be greater than Minimum temperature visitor 把同一个验证程序配置文件用于多个动作(对一个Bean写验证文件,每个使用的Action只要引用) //UserBean public class UserBean{ //属性get,set private String name; private int age; } //UserBean-validation.xml(和UserBean放在同一个包中) 18 99 //Action的validation.xml 如果另一个Action对UserBean使用另一个标准的验证,可以创建新的验证文件 //UserBean-specific-validation.xml 30 50 //另一个Action的validation.xml specific conversion 检查对某个属性进行类型转换是否会导致一个转换错误 An age must be an integer. stringlength 验证一个非空的字段值是不是足够的长度 param:minLength(int);maxLength(int);trim(boolean) 6 14 regex 给定的值是否与一个给定的正则表达式匹配 param:expression(String)正则表达式;caseSensitive(boolean)是否区别大小写,默认为 true;trim(boolean)是否去除前后空格 Invalid phone number or invalid format 3.在action中验证 利用Validateable接口实现验证,实现void validate()方法. ActionSupport类已经实现了这个接口 //继承ActionSupport public class User extends ActionSupport{ //属性get,set private String userName; private String password; private static List static{ userNames.add("harry"); userNames.add("sally"); } //验证方法 public void validate(){ if(userNames.contains(userName)){ //添加出错信息 addFieldError("userName","'"+userName +"' has been taken."); } } } 4.自定义验证类 要创建一个普通的验证程序(非字段验证程序),扩展ValidatorSupport类.验证失败要从validate 方法调用addActionError方法. 要创建一个字段验证程序,扩展FieldValidatorSupport类.验证失败要从validate方法调用addFieldError方法. 如果要能接受参数,要在类中定义一个相应的属性,并生成get,set. 编写类 public class StrongPasswordValidator extends FieldValidatorSupport{ //属性 private int minLength =-1; public void setMinLength(int minLength){ this.minLength = minLength; } public int getMinLength(){ return minLength; } //验证方法 public void validate(Object object)throws ValidationException{ String fieldName = getFieldName(); String value =(String) getFieldValue(fieldName,object); if(value ==null|| value.length()<=0){ // use a required validator for these return; } if((minLength >-1)&&(value.length()< minLength)){ addFieldError(fieldName,object); }else if(!isPasswordStrong(value)){ addFieldError(fieldName,object); } } private static final String GROUP_1 ="abcdefghijklmnopqrstuvwxyz"; private static final String GROUP_2 ="ABCDEFGHIJKLMNOPQRSTUVWXYZ"; private static final String GROUP_3 ="0123456789"; protected boolean isPasswordStrong(String password){ boolean ok1 =false; boolean ok2 =false; boolean ok3 =false; int length = password.length(); for(int i =0; i < length; i++){ if(ok1 && ok2 && ok3){ break; } String character = password.substring(i, i +1); System.out.println("character:"+ character); if(GROUP_1.contains(character)){ ok1 =true; continue; } if(GROUP_2.contains(character)){ ok2 =true; continue; } if(GROUP_3.contains(character)){ ok3 =true; } } return(ok1 && ok2 && ok3); } } 注册xml 在src下创建validators.xml "https://www.wendangku.net/doc/2c3731853.html,/xwork/xwork-validator-config-1.0.dtd"> class="com.validator.StrongPasswordValidator"/> 使用验证 8 Password must be at least 8 characters long and contains at least one lower case character, one upper case character, and a digit. 一、Struts2输入校验介绍 Struts2的输入校验和类型转换都是对请求参数进行处理。 输入校验顾名思义就是请求参数是否能够满足一定的要求; 客户端校验&服务器端校验 客户端校验是指在浏览器这端通过Javascript进行初步校验,为了减轻服务器端的负载;服务器端校验是校验数据的最后一道防线; 在Struts2中,数据校验不需要写任何代码,只需要一个配置文件,配置校验的条件就可以了,非常简单;因此数据校验文件是数据校验的最重要的内容; 二、数据校验规则文件 1.数据校验规则文件规则: 1.此文件中规定了参数的一些校验条件; 2.可以包括字段型校验器和非字段型校验器; 3.命名规则:ActionName-validation.xml,其中ActionName是Action类的名字; 4.每个Action都有一个validation文件,规则文件放在和Action同目录下; 5.在前面我们讲到的配置逻辑action中,如果需要对某个逻辑Action配置数据校验文件,则命名规则为:ActionName-LogicActionName-validation.xml; 6.注意:当需要对逻辑action进行校验时,如果存在一般形式的ActionName-validaton.xml 文件,则也会对此逻辑Action进行校验; 7.输入校验失败后,和类型转换一样,会将错误封装成fieldError,并放入Action Context 中,因此在JSP中添加 评卷浏览 考生姓名张彬答题开始时间2013-04-24 10:15 结束时间2013-05-02 10:15 考生得分0 满分161 及格分60 一、单项选择题(共41题,41分) 1. Customer对象在程序执行到第几行时变为脱管状态? Customer customer=new Customer(); //line1 customer.setName("张三"); Session session=sessionFactory.openSession(); //line2 Transaction tx = session1.beginTransaction(); session.save(customer); //line3 https://www.wendangku.net/doc/2c3731853.html,mit(); //line4 session.close(); //line5 (1 分) A) line1 B) line2 C) line4 D) line5 —标准答案:D —考生答案:D —考生得分:1 评语: 2. 在struts2应用开发中下列描述正确的是(1 分) A) 为每一个Action在XML中配置一个action,并且这个XML配置文件必须命名为struts.xml,并放置在类的根路径下。 B) 为每一个可能接收的逻辑请求编写一个Action类,该类必须继承父类ActionSupport 。 C) 在web程序的部署描述文件(web.xml)中配置struts2核心控制器,该核心控制器是一个过滤器。 D) Struts2的Action必须实现Action接口。 —标准答案:C —考生答案: —考生得分:0 评语: Struts2校验器类型详解 一、Struts2内建校验器 位于xwork-2.0.4.jar压缩包中(com.opensymphony.xwork2.validator.validators)有个文件default.xml ,该文件中定义了Struts2框架内建的校验器。default.xml文件定义了常用的校验器类型。 首先搞清楚: struts2字段校验器与非字段校验器的区别 字段校验器配置格式: Struts2Validator Struts2验证框架 Updated Jun 18, 2010 by cm2...@https://www.wendangku.net/doc/2c3731853.html, Action配置中一定要设置input返回页面 添加验证只要创建验证的xml文件 1.创建xml文件名 验证Action中全部方法 在Action同包下,创建:Action类名-validation.xml 如:ValidateAction创建ValidateAction-validation.xml 验证Action中单个方法 Struts模拟考试试卷 课程名称:《struts:使用struts框架开发基于MVC设计模式的WEB应用》(A)卷 年级:班级: 姓名:_______________ 学号:_________________ 考试(考查) 闭卷 选择题(每题2分,共计100分) 1. ActionForm中的validate方法返回什么值,认为是验证成功()。[选两项] A.null B.空字符串 C.一个空的ActionError对象D.一个空的ActionErrorS对象 2.在Struts中,ActionServlet的作用是()。[选两项] A.它是所有FormBean的父类 B.它是所有ActionBean的父类 C.核心控制器D.将请求中的数据封装到FormBean中 3.下面html标签的使用中正确的是()。[选两项] A. Struts2复习题 1.以下属于struts2的控制器组件是: A.Action B.ActionForm C.ActionServlet D.dispatchAction 2.以下属于struts2的体系结构的是:(多选) A.struts2控制器组件 B.struts2配置文件 C.FilterDispathcer D.Action 3.以下属于struts2配置文件中的配置元素是:(多选) A. 一JQuery.validation 验证框架使用细解 一、用前必备 官方网站:http://bassistance.de/jquery-plugins/jquery-plugin-validation/ API: http://jquery.bassistance.de/api-browser/plugins.html 当前版本:1.5.5 需要JQuery版本:1.2.6+, 兼容 1.3.2 二、默认校验规则 (1)required:true 必输字段 (2)remote:"check.php" 使用ajax方法调用check.php验证输入值 (3)email:true 必须输入正确格式的电子邮件 (4)url:true 必须输入正确格式的网址 (5)date:true 必须输入正确格式的日期 (6)dateISO:true 必须输入正确格式的日期(ISO),例如:2009-06-23,1998/01/22 只验证格式,不验证有效性 (7)number:true 必须输入合法的数字(负数,小数) (8)digits:true 必须输入整数 (9)creditcard: 必须输入合法的信用卡号 (10)equalTo:"#field" 输入值必须和#field相同 (11)accept: 输入拥有合法后缀名的字符串(上传文件的后缀) (12)maxlength:5 输入长度最多是5的字符串(汉字算一个字符) (13)minlength:10 输入长度最小是10的字符串(汉字算一个字符) (14)rangelength:[5,10] 输入长度必须介于 5 和 10 之间的字符串")(汉字算一个字符) (15)range:[5,10] 输入值必须介于 5 和 10 之间 (16)max:5 输入值不能大于5 (17)min:10 输入值不能小于10 三、默认的提示 messages: { required: "This field is required.", remote: "Please fix this field.", email: "Please enter a valid email address.", url: "Please enter a valid URL.", date: "Please enter a valid date.", dateISO: "Please enter a valid date (ISO).", dateDE: "Bitte geben Sie ein g眉ltiges Datum ein.", number: "Please enter a valid number.", numberDE: "Bitte geben Sie eine Nummer ein.", digits: "Please enter only digits", creditcard: "Please enter a valid credit card number.", equalTo: "Please enter the same value again.", accept: "Please enter a value with a valid extension.", maxlength: $.validator.format("Please enter no more than {0} characters."), 1.系统分析与设计 1.1 系统功能描述 本系统是个非常简单的注册、登录系统。本系统的实现是基于Struts2、Spring、Hibernate 三个框架,系统功能单一,业务逻辑简单。 当用户注册信用户时,就是向系统中增加一个新用户,对应的数据库增加一条记录。 当用户输入注册信息时,系统提供了基本的输入验证判断用户输入是否合法,只有当用户输入满足基本输入要求时,才会被提交到实际的登录系统,进行实际的登录处理。 系统还使用了随机产生的图形验证码来防止刷新,防止用户通过单击浏览器的书安心按钮来重复注册多个用户。 系统还提供了一种Ajax方式来验证用户输入的注册名是否有效,系统要求所有的用户名不能重复。故当用户输完用户名后,系统立即在页面上方提示用户该用户名是否可用,如果系统中没有该用户名,则系统提示该用户名可用;否则提示用户该用户名重复,用户必须重新选择用户名注册。 当用户注册一个新用户名之后,就可以使用系统的登录功能来登录系统了,用户输入登录用的用户名、密码后,系统一样提供了基本的输入校验。 除此之外,系统还采用了随机产生图形验证码来防止恶意用户的暴力破解,系统随机生成一个图形验证码,而用户登录必须输入图形验证码中显示的字符串,只有用户输入的字符串和系统随机生成的验证码字符相同时,系统才允许用户登录。 1.2 系统功能流程 1.3 数据库设计 相关的映射文件: JBoss4.2及JBoss5.0部署jax-ws2.0/2.1WebServices 一,部署jax-ws 2.0/2.1 POJO Web Service到JBoss4.2.2.GA 1:必须为你的POJO Web Service定义一个Servlet,并定义service的endpoint。 这意味着必须修改/增加两个文件:WEB-INF/web.xml;WEB-INF/sun-jaxws.xml (附文后) 2:最好将所需的jax-ws jars放到WEN-INF/lib里,免得将这些jar拷贝来拷贝去。 本人曾试了半天,拷来拷去,反正是搞不定。最后还是一古脑儿索性全放到WEB- INF/lib里,倒是爽快: WEB-INF/lib/jaxws-rt.jar WEB-INF/lib/jaxws-tools.jar WEB-INF/lib/log4j-1.2.8.jar WEB-INF/lib/saaj-api.jar WEB-INF/lib/saaj-impl.jar WEB-INF/lib/sjsxp.jar WEB-INF/lib/stax-ex.jar WEB-INF/lib/streambuffer.jar WEB-INF/lib/sxalan.jar 别问我到底哪个是哪个,都是干什么的。 二,部署jax-ws 2.0/2.1 POJO Web Service到JBoss5.0.0.GA 好像是去年,JBoss5面世了,根据其Release Note,它是“the final release of the JBoss 5.0 series for th e Java EE?5 codebase that fully complies with the Java EE 5 conformance testing certification requirements.” 但本人的试验结果却 Struts2校验器类型 10.3 验证器类型 可以把验证器类型分为两种:字段验证器和动作验证器。其中,字段验证器就像前面演示的那样,只验证提交的表单内的单个字段;而动作验证器一般验证提交的表单内的多个字段的关系,比如,录入产品信息的时候,产品的进价不能高于售价。 无论是哪种验证器,都需要考虑以下几个问题: ?验证谁? ?使用什么条件验证? ?不满足条件显示什么结果? ?不满足验证条件时显示的结果出现在页面的什么位置? 10.3.1字段验证器 字段验证器用来验证提交的表单内的单个字段,如同前面的示例,在验证文件里: java代码: 查看复制到剪贴板打印 1. 最常用的三种类型验证 Struts2 配置就不说了,xml命名可以是action类名称-action名称-validation.xml 这样的命名方法可以当当每次访问这个action名称的时候才验证。 看代码。 STRUTS2模拟测试(开卷——定时90分钟) 一、填空题 1.Struts2框架由___Struts1________和____WebWork_______框架发展而来。(Struts&WebWork ) 2.Struts2以___WebWork______为核心,采用____拦截器_______的机制来处理用户的请求。(WebWork,拦截器)3.构建Struts2应用的最基础的几个类库是struts-core-2.1.6.jar___________、__xwork-2.1.2.jar_________、__ognl-2.6.11.jar_________ 、_freemarket-2.3.13、_commons-logging-1.0.4.jar_________以及 ___commons-fileupload-1.2.1.jar________。 4.Struts2中的控制器类是一个普通的_____class______。Class 5.如果要在JSP页面中使用Struts2提供的标签库,首先必须在页面中使用taglib编译指令导入标签库,其中taglib编译指令为_<%@ taglib prefix=”s” uri=”/struts-tags”%>__________。<%taglib uri="/struts-tags" prefix="s"%> 6.在Struts2表单标签库中,表单标签为_ (一)、可选项( options ) (1) (二)插件方法(jQuery validation) (7) (三、四)选择器及实用工具(jQuery validation) (8) 四、实用工具(Utilities) (8) (五)验证器(jQuery validation) (9) (六)内置验证方法(jQuery validation) (11) (七)注意事项(jQuery validation) (17) (八)应用实例(jQuery validation) (18) jQuery验证框架应用 https://www.wendangku.net/doc/2c3731853.html,/blog/556633 Html代码 表单验证错误处理 你会发现在方法中我们使用了 CModel::addError().添加错误接受两个参数: 第一个参数是在表单中显示错误的属性名,第二个参数时显示的错误信息 。用 户提交表单时,可能除表单验证之外还有与表单各输入项无关的其他错误产生, 例如后台数据库出错、接口调用失败等。这种情况下可以在Model 中相应的位 置使用如下代码记录错误: 1 $this->addError('info', '发送不明错误,请重试'); // info 只是一个自定义的名字,不需要真正有这个字段或属性。 然后在视图文件中这样输出错误: 1 echo $form->error($model, 'info'); //$form 是 CActiveForm 的实例。$form->getErrors(); 当我们调用 CModel::validate() 方法, 我们可以指定一个场景参数. 只有在特定 的场景下校验规则才会生效.校验规则会在那些 on 选项没有被设置或者包含了 指定的场景名称的场景中生效.如果我们没有指定场景,而调用 了 CModel::validate() 方法,只有那些 on 选项没有设置的规则才会被执行 . 1 2 3 $model = new model('register'); // or $model=new User; // $model->scenario='register'; 例如,在注册一个用户时,我们运行以下脚本来执行校验 : 1 array('password', 'compare', 'compareAttribute'=>'repassword', 'on'=>'register,edi t'), Email 验证器: 1 array('email','email'), //验证email 这个字段必须符合email 格式 Compare 验证器: 1 2 array('password2','compare','compareAttribute'=>'password1'),//验证 password1和password2必须一致 array('end_date','compare', 'compareAttribute' => 'start_date', 'op erator' => '>', 'message' => '错误的开始结束日期'), Unique 验证器: 1 array('username,email','unique','className'=>'User'),//User 为Model,username,email 在user 中不允许重复 如果被验证属性为空,就认为完全合法,立刻返回,但是如果allowEmpty 为false 的话,就要通过函数后续的所有验证条件 。那么对于一个传入的空值来说, allowEmpty 无论是true 还是false ,极有可能都不会报错,上面节选的验证器是 StringValidator ,如果我没有设定min 的值,那么一个空串在allowEmpty 为false 的情况下,还是不会报任何错误的。如果希望一个属性值不能为空,最好还是用 RequiredValidator 来验证,allowEmpty 是不靠谱的,建议一般就采取allowEmpty 的默认值true ,可以节省几次判断。 1 a rray('verifyCode', 'captcha', 'allowEmpty'=>!CCaptcha::checkRequirements()), Struts2面试题 1、struts2工作流程 Struts 2框架本身大致可以分为3个部分: 核心控制器FilterDispatcher、业务控制器Action和用户实现的企业业务逻辑组件。核心控制器FilterDispatcher是Struts 2框架的基础, 包含了框架内部的控制流程和处理机制。 业务控制器Action和业务逻辑组件是需要用户来自己实现的。 用户在开发Action和业务逻辑组件的同时,还需要编写相关的配置文件, 供核心控制器FilterDispatcher来使用。 Struts 2的工作流程相对于Struts 1要简单,与WebWork框架基本相同, 所以说Struts 2是WebWork的升级版本。基本简要流程如下: 1 、客户端初始化一个指向Servlet容器的请求; 2、这个请求经过一系列的过滤器(Filter) (这些过滤器中有一个叫做ActionContextCleanUp的可选过滤器, 这个过滤器对于Struts2和其他框架的集成很有帮助,例如:SiteMesh Plugin) 3 、接着FilterDispatcher被调用, FilterDispatcher询问ActionMapper来决定这个请是否需要调用某个Action 4、如果ActionMapper决定需要调用某个Action, FilterDispatcher把请求的处理交给ActionProxy 5、ActionProxy通过Configuration Manager询问框架的配置文件, 找到需要调用的Action类 6、ActionProxy创建一个ActionInvocation的实例。 7、ActionInvocation实例使用命名模式来调用, 在调用Action的过程前后,涉及到相关拦截器(Intercepter)的调用。 8、一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果。返回结果通常是(但不总是,也可能是另外的一个Action链)一个需要被表示的JSP 或者FreeMarker的模版。在表示的过程中可以使用Struts2 框架中继承的标签。在这个过程中需要涉及到ActionMapper 9、响应的返回是通过我们在web.xml中配置的过滤器 10、如果ActionContextCleanUp是当前使用的,则FilterDispatecher将不会清理sreadlocal ActionContext;如果ActionContextCleanUp不使用,则将会去清理sreadlocals。 2、说下Struts的设计模式 MVC模式: web应用程序启动时就会加载并初始化ActionServler。用户提交表单时,一个配置好的ActionForm对象被创建,并被填入表单相应的数据,ActionServler根据Struts-config.xml文件配置好的设置决定是否需要表单验证,如果需要就调用ActionForm的Validate()验证后选择将请求发送到哪个Action,如果Action不存在,ActionServlet会先创建这个对象,然后调用Action的execute()方法。Execute()从ActionForm对象中获取数据,完成业务逻辑,返回一个ActionForward对象,ActionServlet再把客户请求转发给ActionForward对象指定的jsp组件,ActionForward对象指定的jsp生 成动态的网页,返回给客户。 jQuery validation验证框架 jQuery验证框架(一)可选项(jQuery validation) 15人收藏此文章,收藏此文章发表于8个月前, 已有3152次阅读共0个评论15人收藏此文章 jQuery验证框架 Html代码 1. 3. 8.Struts2之输入校验
三大框架练习题
Struts2校验器类型详解
struts2验证框架
Struts测试题
struts2复习题(含答案)
jquery validate 校验框架使用开发指南
struts2 实验报告
Validator验证框架的内置标准验证
Struts2校验器类型
struts2基于xml验证(最常用的三种类型String、Date、int验证)
STRUTS2模拟(答案)
jQuery验证框架
YII框架数据验证规则
struts2面试题(自己总结)
jQuery_validation验证框架使用方法