资源预览内容
第1页 / 共70页
第2页 / 共70页
第3页 / 共70页
第4页 / 共70页
第5页 / 共70页
第6页 / 共70页
第7页 / 共70页
第8页 / 共70页
第9页 / 共70页
第10页 / 共70页
亲,该文档总共70页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
1,基于MVC的WEB开发,Struts 2 框架应用开发 教师:唐光义,2,第9章 Struts 2 框架的数据校验,Struts2输入基础校验应用 输入校验的重要性、 Struts2输入校验的实现方式 手动编程实现输入校验 校验框架实现输入校验 Struts2输入校验高级用法 自定义校验器 visitor校验器的应用方法 验证注解,3,概述,一个健壮的 web 应用程序必须确保用户输入是合法、有效的. Struts2 的输入验证 基于 XWork Validation Framework 的声明式验证:Struts2 提供了一些基于 XWork Validation Framework 的内建验证程序. 使用这些验证程序不需要编程, 只要在一个 XML 文件里对验证程序应该如何工作作出声明就可以了. 需要声明的内容包括: 哪些字段需要进行验证 使用什么验证规则 在验证失败时应该把什么样的出错消息发送到浏览器端 编程验证:通过编写代码来验证用户输入,4,public String execute() throws Exception /如果用户名不为空,且不匹配长度为425的字母和数字组成的字符串 if(name!=null ,5,Struts2输入校验基础,输入校验的实现方式 Struts2中的输入校验 手动编程方式:主要是通过在类中编写校验逻辑代码 使用struts2校验框架:把校验逻辑放到配置文件中,实现校验逻辑代码与业务逻辑代码的分离。示例struts9_1,6,Struts2输入校验基础,输入校验的实现方式 手动编程方式 方式一:重写validate()方法,在struts2框架中,专门用来校验数据的方法是validate()方法。开发者可以通过继承ActionSupport类,并重写validate()方法来完成输入校验。 方式二:重写validateXxx()方法:在struts2框架中,Action中可以包含多个处理逻辑,也就是类似于execute的多个方法,只是方法名不同,在struts.xml文件中配置Action时,可以指定method属性,框架将根据属性值来执行相应的逻辑。Struts2框架允许在Action中提供一个validateXxx()方法,专门校验xxx()这个处理逻辑。例如,有一个处理逻辑为regist()的方法,在Action中,就可以使用validateRegist()方法来校验这个处理逻辑。,7,Struts2输入校验基础,Action中* 要继承ActionSupport* 重写Validateable接口中的validate()方法 ,在该方法中完成验证* 步骤如下:* validate()方法在其他的业务方法之前执行* 验证出错转向的页面struts.xml配置/validate/login.jsp 其中input转向是在action中已经定义好的.public static final String INPUT = “input“; * 什么时候表示验证出错(转向input所指向的页面)* this.addFieldError(“sss“, “错误信息“);方法指向的是一个集合* 当集合不为空时,转向错误页面.,8,Struts2输入校验基础,* validate()方法会校验action中所有与execute方法签名相同的方法。 * 要校验指定的方法通过重写validateXxx()方法实现, validateXxx()只会校验action中方法名为Xxx的方法。其中Xxx的第一个字母要大写。* 当某个数据校验失败时,调用addFieldError()方法往系统的fieldErrors添加校验失败信息(为了使用addFieldError()方法,action可以继承ActionSupport ),如果系统的fieldErrors包含失败信息,struts2会将请求转发到名为input的result。* 在input视图中可以通过显示失败信息。validateXxx()方法使用例子:public String add() throws Exceptionreturn “success“; 对应的验证方法 public void validateAdd()/验证代码 ,9,输入校验的流程,1。类型转换器对请求参数执行类型转换,并把转换后的值赋给action中的属性。2。如果在执行类型转换的过程中出现异常,系统会将异常信息保存到ActionContext,conversionError拦截器将异常信息封装到fieldErrors里,然后执行第3步。如果类型转换没有出现异常,则直接进入第3步。3。系统通过反射技术调用action中的validateXxx()方法,Xxx为方法名。4。调用action中的validate()方法。5。经过上面4步,如果系统中的fieldErrors存在错误信息(即存放错误信息的集合的size大于0),系统自动将请求转发至名称为input的视图。如果系统中的fieldErrors没有任何错误信息,系统将执行action中的处理方法。,10,手动编程方式(一):在execute()中验证,register.jsp,11,ValidateInExecute.java,省略了setter()/getter()方法,12,struts.xml文件,13,手动编程方式(二)重写validate ()方法,省略了setter()/getter()方法,struts.xml与register.jsp见上述PPT,14,手动编程方式(三):重写validateXxx()方法,省略了setter()/getter()方法,15,16,struts.xml配置文件,register.jsp见上述PPT,17,示例 struts9_2,18,基于XML配置方式实现输入校验,1、建立Jsp页面,定义需求 * 用户名不能为null ,“* 密码不能为null, “ 并且密码的长度6-12之间,19,基于XML配置方式实现输入校验,2、定义Action* 要继承ActionSupport或者实现Validateable接口:,20,基于XML配置方式实现输入校验,3、配置struts_validate.xml文件* 验证出错转向的页面struts.xml配置/validate/login.jsp 其中input转向是在action中已经定义好的.,21,基于XML配置方式实现输入校验,4、配置验证的xml文件* 验证的xml文件的规范在xwork-core-2.1.6.jar包下的:xwork-validator-1.0.3.dtd* 验证文件的命名* 在这个校验文件中,对action中字符串类型的username属性进行验证,首先要求调用trim()方法去掉空格,然后判断用户名是否为空。* 该文件需要和action类放在同一个包下,文件的取名应遵守ActionClassName-validation.xml规则,其中ActionClassName为action的简单类名,-validation为固定写法。* 例如:如果Action类为cn.itcast.validate.ValidateXmlAction. 那么该文件的取名应为:ValidateXmlAction-validation.xml* 如果Action类ValidateXmlAction的某一个方法login进行验证. 那么该文件的取名应为:ValidateXmlAction-Login-validation.xml* ValidateXmlAction-validation.xml为文件的配置如下,22,基于XML校验的一些特点,当为某个action提供了ActionClassName-validation.xml和ActionClassName-ActionName-validation.xml两种规则的校验文件时,系统按下面顺序寻找校验文件: 1。AconClassName-validation.xml 2。ActionClassName-ActionName-validation.xml 系统寻找到第一个校验文件时还会继续搜索后面的校验文件,当搜索到所有校验文件时,会把校验文件里的所有校验规则汇总,然后全部应用于处理方法的校验。如果两个校验文件中指定的校验规则冲突,则只使用后面文件中的校验规则。当action继承了另一个action,父类action的校验文件会先被搜索到。假设UserAction继承BaseAction, UserAction在struts.xml的配置如下:.访问上面名为user的action,系统先搜索到BaseAction-validation.xml, BaseAction-user-validation.xml,接着搜索到UserAction-validation.xml, UserAction-user-validation.xml。校验规则是这四个文件的总和。,23,基于XML配置方式实现输入校验,: 根元素 :指定action中要校验的属性,name属性指定将被验证的表单字段的名字 :指定校验器, type 指定验证规则上面指定的校验器requiredstring是由系统提供的,系统提供了能满足大部分验证需求的校验器,这些校验器的定义可以在xwork-2.x.jar中的com.opensymphony.xwork2.validator.validators下的default.xml中找到。 :子元素可以向验证程序传递参数 :子元素为校验失败后的提示信息,如果需要国际化,可以为message指定key属性,key的值为属性文件中的key。,24,基于XML配置方式实现输入校验,示例struts9_3、 struts9_4,25,验证框架注意,通常要对哪个Action验证就需要给出相应的XxxAction-validation.xml文件,例如,如果要对UserAction进行验证就需要UserAction-validation.xml文件配置 如果要对同一个UserAction的不同方法reg()与login()分别进行验证,如何做呢? 这时需要给出二个不同的验证文件:命名规则如下:UserAction-reg-validation.xml和UserAction-login-validation.xml 但是请注意UserAction-reg-validation.xml和UserAction-login-validation.xml中的reg与login不是指的reg()和login()的方法名,而是指在struts.xml中配置的action配置的name属性的名字.,26,Struts2内置校验器,27,校验器配置风格(一),28,校验器配置风格(二),29,必填校验器required,30,required校验器示例,31,required校验器示例,32,required校验器示例,33,required校验器示例,34,requiredstring校验器,35,requiredstring校验器示例,36,requiredstring校验器示例,37,requiredstring校验器示例,38,stringlength校验器示例,39,requiredstring校验器示例,40,int校验器,41,int校验器示例,42,int校验器示例,43,int校验器示例,44,conversion校验器,45,conversion校验器示例,46,date校验器,47,date校验器示例,48,date校验器示例,49,date校验器示例,50,email与url校验器,51,email与url校验器示例,
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号