第15章struts2校验机制.docx
《第15章struts2校验机制.docx》由会员分享,可在线阅读,更多相关《第15章struts2校验机制.docx(50页珍藏版)》请在冰豆网上搜索。
![第15章struts2校验机制.docx](https://file1.bdocx.com/fileroot1/2023-5/23/1ed63c23-0dbe-4203-9f7a-71a1c797bb0f/1ed63c23-0dbe-4203-9f7a-71a1c797bb0f1.gif)
第15章struts2校验机制
输入校验
一、Struts2校验机制
Struts2框架提供了优秀的校验机制,它们可以分为3部分:
(1)内置校验器,对web应用开发中常见的校验功能进行了封装
(2)校验规则声明,允许开发人员通过XML配置文件或者JavaAnnoation来引用内置校验器定义输入校验规则
(3)校验拦截器,框架通过拦截器validation和workflow来实现对输入信息的校验工作。
Validation拦截器根据校验规则声明调用内置拦截器实现校验工作,并负责维护创建一个字段相关的错误信息列表,workflow负责检查此错误信息列表,如果存在错误信息,则返回Action组件相关的input结果视图,并在返回的视图中显示相关的错误信息。
此外还支持开发人员定义自己的校验器。
类型转换和输入校验是Struts2框架对客户端提交信息进行处理的两个阶段。
客户端提交的信息首先进行类型转换,不管是否在转换过程中出现异常,都将进入输入校验阶段。
只有在类型转换和输入校验没有任何错误的情况下才会进入Action组件的业务逻辑处理。
二、利用Struts2框架实现校验
【例子】
【Quiz.jsp】
<%@pagecontentType="text/html"pageEncoding="UTF-8"%>
<%@taglibprefix="s"uri="/struts-tags"%>
DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN"
"http:
//www.w3.org/TR/html4/loose.dtd">
问卷调查你喜欢的笔记本品牌
fielderror/>
formaction="basicValidate"method="post"namespace="/validate">
textfieldname="name"label="姓名"/>
textfieldname="age"label="年龄"/>
textfieldname="answer"label="笔记本品牌"/>
submitvalue="提交"/>
form>
【Quiz_success.jsp】
<%@pagecontentType="text/html"pageEncoding="UTF-8"%>
<%@taglibprefix="s"uri="/struts-tags"%>
<%@pageisELIgnored="false"%>
DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN"
"http:
//www.w3.org/TR/html4/loose.dtd">
问卷结果
谢谢!
propertyvalue="name"/>
你喜欢的笔记本品牌是:
propertyvalue="answer"/>
【QuizAction.java】
packagemy.ognl;
importcom.opensymphony.xwork2.ActionSupport;
publicclassQuizActionextendsActionSupport{
privateStringname;
privateintage;
privateStringanswer;
publicStringgetName(){
returnname;
}
publicvoidsetName(Stringname){
this.name=name;
}
publicintgetAge(){
returnage;
}
publicvoidsetAge(intage){
this.age=age;
}
publicStringgetAnswer(){
returnanswer;
}
publicvoidsetAnswer(Stringanswer){
this.answer=answer;
}
}
【QuizAction-validation.xml】
xmlversion="1.0"encoding="UTF-8"?
>
DOCTYPEvalidatorsPUBLIC
"-//ApacheStruts//XWorkValidator1.0.2//EN"
"http:
//struts.apache.org/dtds/xwork-validator-1.0.2.dtd">
用户名不可为空
6
120
年龄值超出合理范围
【struts.xml】
class="my.ognl.QuizAction"method="execute">
/WEB-INF/page/Quiz_success.jsp
/Quiz.jsp
测试
地址栏输入
http:
//localhost:
8080/example_ch1/Quiz.jsp
如果不输入姓名,年龄输入200,笔记本品牌输入IBM,得到的结果为
在与Action组件同样的package路径下寻找名为**-validation.xml的校验规则声明文件,其中**代表Action组件的名称。
对于实现了输入校验的Action组件,必须定义一个名为input的Result视图,当框架调用校验器执行校验失败时,将返回此Result视图。
三、Struts2内置校验器
位于xwork-2.0.4.jar压缩包中( com.opensymphony.xwork2.validator.validators)有个文件default.xml ,该文件中定义了Struts2框架内建的校验器。
default.xml文件定义了常用的校验器类型。
四、校验器配置
字段校验器:
判断某个字段属性的输入是否有效
非字段校验器:
不是针对某个字段,而是针对多个字段的输入值之间的逻辑关系进行校验
相应的,Struts2内置校验器也就有两种配置风格,一种是字段校验风格,一种是非字段校验风格。
1、必填校验器,指定字段不允许为空:
(1)非字段校验:
username
用户名不能为空
(2)字段校验:
用户名不能为空
2、必填字符串校验器,字段值必须非空且长度大于0:
(1)非字段校验:
username
true
用户名不能为空
(2)字段校验:
true
用户名不能为空
∙trim:
可选参数,用于指定是否在校验之前对字符串进行整理,默许为true。
3、字符串长度校验器,要求被校验的字段长度必须在指定范围之内:
(1)非字段校验:
username
4
10
用户名长度在${minLength}到${maxLength}之间
(2)字段校验:
4
10
true
4、整数校验器,整数值在指定的范围内:
(1)非字段校验:
age
10
100
年龄必须在在${min}到${max}之间
(2)字段校验:
10
100
年龄必须在在${min}到${max}之间
5、日期校验器,要求日期在指定范围内
(1)非字段校验:
birthday
1990-01-02
2010-07-28
生日数据错误
(2)字段校验:
1990-01-01
2010-07-28
∙min:
指定字段日期值的最小值,该参数为可选参数。
∙max:
指定字段日期值的最大值,该参数为可选参数。
6、浮点数值校验器:
(1)非字段校验:
percentage
20.1
50.1
数据错误
(2)字段校验:
20.1
50.1
∙minInclusive|minExclusive:
指定字段的最小值,包含该值|不包含该值。
∙maxInclusive|maxExclusive:
指定字段的最大值, 包含该值|不包含该值。
7、表达式校验器,要求满足指定的表达式要求:
.......
FailedtomeetOgnlExpression...
∙expression:
该参数为一个逻辑表达式,该参数使用OGNL表达式,并基于值栈计算,返回一个Boolean类型值。
8、字段表达式校验器,要求指定字段值满足表达式要求:
(1)非字段校验:
myField
[CDATA[#myCreditLimit>#myGirfriendCreditLimit]]>
MycreditlimitshouldbeMOREthanmygirlfriend
(2)字段校验:
[CDATA[#myCreditLimit>#myGirfriendCreditLimit]]>
MycreditlimitshouldbeMOREthanmygirlfriend
9、邮件地址校验器,有效的邮件地址
(1)非字段校验:
MyEmail
非法的邮件地址
(2)字段校验:
非法的邮件地址
10、网址校验器,指定字段是否是有效的URL地址:
(1)非字段校验:
myHomePage
Invalidhomepageurl
(2)字段校验:
Inva