Struts2中的输入校验

合集下载

第3章 Struts2访问数据库及输入校验

第3章 Struts2访问数据库及输入校验

应用Struts2校验框架(4) 校验框架( ) 应用 校验框架
在XML文件ห้องสมุดไป่ตู้配置校验器有两种方式:
使用<field> < field-validator ></field-validator></field> <validators> 标签对,如图(b)所示.
<field name="userName"> 配置文件 <field-validator type="requiredstring"> 图(b) <message>必须输入用户名</message> 待校验字段 </field-validator> 校验器 校验器 </field> <field name="password"> <field-validator type="requiredstring"> <message>必须输入密码</message> </field-validator> </field> </validators> 因为第二种方式 是以待校验字段为核 心集中配置校验器, 校验器 便于后期维护管理, 所以开发时通常使用 此种方式
编程方式实现Struts2输入校验 输入校验 编程方式实现
将校验数据的代码放在Action类中.
在execute()中实现.(见Example1) 继承ActionSupport类并覆盖重写validate()方 法.(见Example2) validate*()方法 (见6.5.1)

Struts2 数据输入校验(1) —— 函数验证

Struts2 数据输入校验(1) —— 函数验证

Struts2 数据输入校验(1) ——函数验证Java框架 2009-02-20 13:10 阅读70 评论0字号:大中小用struts2标签库来实现上述目的的基本原理:错误消息分为field级和action级,都在ActionSupport类中预定义了,不同的是,fieldError是通过一个Map来实现,事实上记录了field的名字和错误信息,因此能在页面上对应的field中显示;而actionError是通过一个Collection实现,没有记录报错的来源,只记录了错误信息。

注意,下面是简要流程:(1)页面提交到action之后,首先struts会尝试对输入的字符串信息根据Action中定义的属性类型进行类型匹配及转换,如果输入为空,它会将内容置为该类型的缺省值(0、0.0、空字符串等等),对于数据格式不匹配的情况,比如说在age栏里面输入字母等等,struts会自动提示默认的错误,并返回input,这一工作是struts2自动完成的。

(2)然后,验证机制生效,调用validate()函数和XML验证框架中的验证逻辑(《S truts2 数据输入校验(2) ——XML验证》会提到),检查的同时会因为验证错误调用了a ddFieldError()和addActionError()。

页面提交之前,struts会调用ActionSupport(严格说是ValidationAware接口)的hasErrors()方法,该方法很简单,就是检查fieldError的Map和actionError的Collection是否为空,如果均为空,则调用execute()方法[*]进行业务逻辑的调度,否则返回error。

(3)最后,程序会根据返回信息执行forward操作,struts.xml中则定义了这些返回值所对应的跳转逻辑。

如果有错误返回,错误信息会在页面上提示在Action中所有addFieldError()设置的信息将在对应的field位置显示;在Action中所有addActionError()设置的信息将不会显示,除非在页面中定义了s: actionerror控件,那么错误将以ul的格式显示。

Struts2 数据输入校验(3) —— 问题补遗

Struts2 数据输入校验(3) —— 问题补遗

Struts2中的13个校验规则:required、req uiredstring、int、double、date、e xpressio n、fielde xpressio n、email、url、visitor、co nversio n、stringleng th、rege x。

两种验证机制的执行顺序先执行validation.xml,后执行Action内部的validate()方法。

Actio nSupport类对ActionError和FieldError的实现细节在Actio nAware接口中声明的ActionError,ActionMessage: Collection<String>FieldError: Map<String,List<String>>Actio nSupport组合了一个实现了Validatio nAwa re的ValidationAwareSupport来继承Validatio nAwa re接口:Validatio nAwa reSupport类内部声明了三个私有变量,其中actionMessage = new ArrayList<String>();actionError = new ArrayList<String>();fieldErrors = new LinkedHashMap<String, List<String>>();FieldErro rs需要注意的一点我们往FieldErrors中添加错误的时候,需要调用addFieldError(),而不应该调用getFieldErrors().p ut()函数.这两个方法看起来是一样的,其实不然。

getFieldErrors()在实现的时候返回的是fieldErrors的一个可写副本,修改这个副本不会真正将错误传入fieldErro rs中去。

2、Struts2输入校验及动态方法调用

2、Struts2输入校验及动态方法调用

Struts2.11.动态方法调用一、提交是通过<form action="user!login.action">,表示提交到Action为user的Action的login方法去处理。

所以UserAction需要写public Stringlogin() throws Exception{…}方法.二、为Action指定method属性。

如:<form action="login.action"><action name="login" class="erAction"method="login">…</action>。

缺点:冗余三、使用通配符。

如:<action name="*Action" class="erAction"method="{1}"><result name="error">/error.jsp</result><result name="success">/success.jsp</result></action>或<action name="*_*" class="struts.action.{1}Action"method="{2}"><result name="{2}">/{2}.jsp</result><result name="error">/error.jsp</result><result name="success">/success.jsp</result></action>2.Struts2输入校验输入校验流程:1. 类型转换器负责对字符串的请求参数执行类型转换。

Struts2用户校验

Struts2用户校验

§2.1 Struts2用户校验(struts2校验框架)Struts2提供了功能强大的输入校验机制,通过Struts2内建的输入校验器,应用无需书写任何代码,即可完成大部分的校验功能,并可以同时完成客户端和服务器端的校验。

如果应用的输入校验规则特别,Struts2也允许通过重写validate方法来完成自定义校验,另外Struts2的开放性还允许开发者提供自定义的校验器。

表现层的数据处理包括两个方面:一是数据类型的转化,因为Web应用接收到的所有数据都是字符串类型的;另一个就是输入校验,因为开发者必须全面考虑用户输入的各种情况,尤其需要注意那些非正常输入。

客户端的校验最基础的方法就是在页面写javascript代码手工校验,服务器端的校验最基础的方法就是在处理请求的Servlet的service()方法中添加校验代码。

Struts2中可以通过重写validate方法来完成输入校验。

如果我们重写了validate方法,则该方法会应用于此Action中的所有提供服务的业务方法。

Struts2支持校验特定方法的validateXxx()方法。

例如某个Action中有一个regist()业务方法,我们可以写一个validateRegist()方法来进行regist()的特殊校验,客户端请求调用的次序如下:validateRegist()--------------->validate()-------------->regist()Struts2的输入校验流程如下:1,类型转换器负责对字符串的请求参数执行类型转换,并将这此值设置成Action的属性值。

2,在执行类型转换过程中可能出现异常,如果出现异常,将异常信息保存到ActionContext 中,conversionError拦截器负责将其封装到fieldError里,然后执行第3步;如果转换过程没有异常信息,则直接进入第3步。

Java Struts2 输入校验器大全

Java Struts2 输入校验器大全

Struts2 输入校验器大全技术要点介绍Struts2 自带的输入校验器。

演示代码在xwork-2.0.4.jar 包中,请读者在\com\opensymphony\xwork2\validator\validators 路径下找一个名字为“ default.xml ”的xml 文件。

在该文件中有所有Struts2 自带的输入校验器定义。

具体代码如下:Java代码1. <!-------------文件名:default.xml-------->2. …………3. <validators>4. <validator name="required"5. class="com.opensymphony.xwork2.validator.validators.RequiredFieldValidator"/>6. <validator name="requiredstring"7. class="com.opensymphony.xwork2.validator.validators.RequiredStringValidator"/>8. <validator name="int"9. class="com.opensymphony.xwork2.validator.validators.IntRangeFieldValidator"/>10. <validator name="double"11. class="com.opensymphony.xwork2.validator.validators.DoubleRangeFieldValidator"/>12. <validator name="date"13. class="com.opensymphony.xwork2.validator.validators.DateRangeFieldValidator"/>14. <validator name="expression"15. class="com.opensymphony.xwork2.validator.validators.ExpressionValidator"/>16. <validator name="fieldexpression"17. class="com.opensymphony.xwork2.validator.validators.FieldExpressionValidator"/>18. <validator name="email"19. class="com.opensymphony.xwork2.validator.validators.EmailValidator"/>20. <validator name="url"21. class="com.opensymphony.xwork2.validator.validators.URLValidator"/>22. <validator name="visitor"23. class="com.opensymphony.xwork2.validator.validators.VisitorFieldValidator"/>24. <validator name="conversion"25. class="com.opensymphony.xwork2.validator.validators.ConversionErrorFieldValidator"/>26. <validator name="stringlength"27. class="com.opensymphony.xwork2.validator.validators.StringLengthFieldValidator"/>28. <validator name="regex"29. class="com.opensymphony.xwork2.validator.validators.RegexFieldValidator"/>30. </validators>以上代码是所有Struts2 输入校验器的定义,下面将这些输入校验器(一共有13 个)的字段和非字段格式的校验形式写在如下,本例中没有程序代码示例,所有输入校验器的应用代码都是笔者自己定义的。

struts2学习笔记(五)在Action类中进行数据的输入校验

struts2学习笔记(五)在Action类中进行数据的输入校验

struts2学习笔记(五)在Action类中进行数据的输入校验不使用struts标签的话,在FORM元素中的ACTION属性的值后面必须手动添加" .action "用HTML标签来编写表单,在数据出错返回原来页面时想要显示框架自动添加的错误信息要用Struts标签:<s:fielderror></s:fielderror>要再次显示表单中一部分正确的信息,在HTML标签中可以value=”${requestScope.组件名}”使用struts标签会自动显示返回的错误信息,并保留显示部分正确信息.使用STRUTS标签来显示addFieldError中的错误信息于页面比较两个日期(DATE)先后:Calendar c1=Calendar.getInstance();c1.setTime(date1);//date1为一个Date对象Calendar c2=Calendar.getInstance();c2.setTime(date2);c1.before(c2);//比较两个日期的先后,返回一个boolean值value="${ername}"不能自动转化为INT类型的值被转化为0,并生成一条错误信息放入addFieldErrorstruts.xml中的constant元素用来存放常量先进行类型转换再进行输入校验Struts.xml文件中<package>元素前这样写:<constant name="struts.custom.i18n.resources" value="message"></constant>classes目录下的message.properties文件(文件名如上一行中绑定的value值一致),内容如下:全局xwork.default.invalid.fieldvalue={0} error任何属性在转换过程中出错,就会调用message.properties中的指定,{0}为用出错的属性名,并在后面加上ERROR 0是用来匹配哪个出错属性(如用页面中该组件的name值来代替)可以在action类下面:XAction.properties文件(文件名与ACTION类相同);写法:局部invalid.fieldvalue.age=age conversion errorage为在action类的转化过程中可能出错的属性名,=后面的字符串用来替换在出错后由框架自动添加进去的错误信息.要用中文来代替输入错误信息的话,需要对中文先进行编码,可以用到JDK/BIN目录下的native2ascii.exe程序,使用方法在DOS窗口中输入命令native2ascii回车后在新的一行输入你要转换的中文,回车后就行,将转换后的结果复制到properties文件中就可以在页面中显示中文提示信息了.也可以进行文件2文件的转换,命令如下:native2ascii test.txt result.properties 需要在要转换的文件目录下执行该命令全局要在struts.xml文件中用<constant>元素定义,并在classes目录下编写相应的properties文件,局部只需在相应的包内编写相应文件名的属性文件类型转换和输入校验的流程:1 先对STRUTS客户端传来的数据进行类型转换2 类型转换完成后再进行输入校验'3 如果类型转换和输入校验都没有错误发生,那么进入EXECUTE方法,(调用商业逻辑)注意:如果类型转换不成功也要进行输入校验(如INT类型转换出错自动赋值为O,STRING类型转换出错自动为NULL)。

struts2中所有方法进行输入校验

struts2中所有方法进行输入校验
2.如果在执行类型转换的过程中出现异常,系统会将异常信息保存到ActionContext,conversionError
拦截器将异常封装到filedErrors里。不管类型转换是否出现异常,都会进入第3步。
3.系统通过反射技术先调用action中的validateXxx()方法,Xxx为方法名。
4.再调用action中的validate()方法。
5.经过上面4步,如果系统中的filedErrors存在错误信息(即存放错误信息的集合的size大于0),
系统自动将请求转发至名称为input的视图。如果系统中的filedErrors 没有任何错误信息,系统将执行
action中的处理方法。
return username;
}
public void setUsername(String username){
ername = username;
}
public String getMobile(){
return mobile;
}
public void setMobile(String mobile){
对指定方法进行校验
validate.Xxx
public void validateUpdate(){ //重写,会对action 中的指定方法进行校验
==========================
输入校验的流程:
1.类型转换器对请求参数执行类型转换,并把转换后的值赋给action属性。
import com.opensymphony.xwork2.ActionSupport;
pubilc class PersonAction extends ActionSupport{

软件开发框架Struts2输入校验

软件开发框架Struts2输入校验
讲解归纳
课件演示
认真听讲
参与发言
示范操作
(1)使用字段校验的输入校验实例
(2)使用非字段校验的输入校验实例
(3)输入校验的国际化信息提示实例
讲解
示范
认真听讲
参与发言
任务实施
(1)使用字段校验的输入校验实例
(2)使用非字段校验的输入校验实例
(3)输入校验的国际化信息提示实例
动手实践
分组实践
小组讨论 动手实践
《软件开发框架(
单元5Struts2输入校验
授课教师:软件开发课程组
授课班级:单元总学时:6
教学条件
软件开发平台、投影设备、广播软件、互联网
教学素材
参考教材、课件、授课录像
教学目标
知识目标:
(1)了解输入校验的重要性;
(2)掌握validate。方法的使用;
(3)掌握validateXxx()方法的使用;
讲解归纳
课件演示
认真听讲
参与发言
示范操作
(1)必填校验器使用实例
(2)字符串长度使用实例
(3)日期校验器使用实例
(4)邮件地址校验器使用实例
讲解
示范
认真听讲
参与发言
任务实施
(1)必填校验器使用实例
(2)字符串长度使用实例
(3)日期校验器使用实例
(4)邮件地址校验器使用实例
动手实践
分组实践
小组讨论
动手实践
(4)掌握校验器的配置风格;
(5)熟练掌握Struts2常用内置校验器。
能力目标:
(1)能够重写validate()方法和validateXxx()方法,实 现手动输入校验;
(2)能够熟练使用字段校验器配置风格和非字段校验 器配置风格;

第4章 Struts 2输入校验

第4章  Struts 2输入校验

4.2.1 正则表达式
客户端校验一般都使用JavaScript来进行输入的 校验。JavaScript对输入判断都会使用到正则表 达式。正则表达式是字符串处理的利器,功能非 常强大。 正则表达式的功能非常强大,通过它可以进行字 符串匹配、字符串查找、字符串替换。今天重点 介绍字符串的匹配功能,字符串的匹配功能对于 输入校验提供了很大的帮助。先看下面简单的正 则表达式的示例。 正则表达式:a.b 匹配abb,acb,等 “.“是正则表达式的特殊字符,它的含义是匹配 所有的字符还有空格和Tab键。
4.4.3 校验动态方法
前面介绍的在一个Action中包含多个处理逻辑,不同处理逻辑对 应不同的方法。那如何定义输入校验来校验这些处理逻辑呢? 下面来看一个简单示例,首先将上一示例中的Action中添加一个 validate()方法,该方法将在控制台上简单的打印一句话,代码 如下所示。 public void validate() { System.out.println("validate method"); } 这里为了简单测试,并不输入任何的用户信息。直接单击“注册” 按钮,在控制台将打印如下语句: validate method execute method 从控制台打印的语句可以看出,在Action中首先执行了validate() 校验方法,然后再执行execute()处理逻辑方法。如果单击“删除” 按钮,在控制台将打印如下语句。 validate method delete method
4.2.2 JavaScript中使用正则表达式
下面以一个简单示例来介绍在JavaScript中使用 正则表达式进行字符串匹配。程序要求必须输入 数字,如果输入的不是数字就弹出提示,代码如 下所示。

软件开发框架(J2EE)Struts 2手动输入校验

软件开发框架(J2EE)Struts 2手动输入校验
软件开发框架(J2EE)
输入校验的重要性
• 由于Web应用的开放性,输入校验直接影响了系统的稳 定性。因为不能保证每个用户都按照开发者的意图来输 入数据,而往往有些用户喜欢恶意输入非法数据来进行 测试和破坏。例如,会员注册系统中,如果用户输入的 出生日期在今日日期之后,则需要对用户输入的数据信 息进行校验并在页面中提示用户校验的结果信息。因此 ,良好的输入校验,是一个项目的必不可少的环节。
软件开发框架(J2EE)
validate()方法输入校验
• 在Struts 2框架中,validate()方法是专门用来校验数据的 方法。具体实现时,可以通过继承ActionSupport类,并 重写validate()方法来完成输入校验。
软件开发框架(J2EE)
validate()方法输入校验实例
软件开发框架(J2EE)
validate()方法输入校验实例
1.在MyEclipse开发工具中创建Web应用ch6,并配置Struts 2开发环境。
软件开发框架(J2EE)
validate()方法输入校验实例
2. 在 src 目 录 下 新 建 com.mxl.actions 包 , 并 在 其 中 创 建 LoginAction 类 , 在 该 类 中 重 写父 类 ActionSupport 中 的 validate()方法。
软件开发框架(J2EE)
validate()方法输入校验实例
5.运行程序,请求userlogin.jsp页面,输入用户名和密码, 校验数据的有效性。
软件开发框架(J2EE)
validateXxx()方法输入校验
• 在Struts 2框架中,Action可以包含多个逻辑处理方法, 也就是可以包含多个类似于execute()的方法,只是方法 名不同。如果在Action中重写了validate()方法后,则会在 每次调用逻辑处理方法前调用validate()方法。

第4章 Struts 2的输入校验

第4章 Struts 2的输入校验

清华大学出版社
regex(正则表达式校验器)
• <field-validator type="regex"> • <param name="expression"><![CDATA[^1[3578]\d{9}$]]></param> • <message>手机号格式不正确!</message> • </field-validator>
• • • • • • • • • •
无限挑战 无限飞翔
Struts 2框架应用教程
清华大学出版社
required(必填校验器)
• <field-validator type="required"> • <message>性别不能为空!</message> • </field-validator>
7.1.2
服务端校验
• 服务器端校验对于系统的安全性、完整性、健壮性起到了 至关重要的作用。Struts 2框架是非常强大的,它提供了 一套验证框架,通过验证框架能够非常简单和快速地完成 输入校验。 • 在服务器端,对于输入校验Struts 2提供了两种实现方法 :一是采用手工编写代码实现(手工编程),二是基于 XML配置方式实现(Struts 2校验框架)。
• • • • • 1.创建JSP页面practice724733.jsp,该页面与practice724.jsp页面完全一样,唯一不 同的就是表单的action属性值。该页面的action属性值practice724733.action 。 2.创建Action类Practice724733Action.java 3.在action包下编写校验文件Practice724733Action-validation.xml 4.配置Action 5.校验显示效果

Struts2 数据输入校验(2) —— XML验证

Struts2 数据输入校验(2) —— XML验证

Struts2 数据输入校验(2) —— XML验证struts2提供了通过XML方式对输入数据进行验证的校验框架。

在与XXXAction同级的目录下,建立XXXAction-validation.xml,即为该Action的校验逻辑。

该校验XML的dtd格式文件为/xwork/xwork-validator-1.0.2.dtd,具体内容可以展开下面的代码:/xwork/xwork-validator-1.0.2.dtd可以看到,数据校验XML的根元素<validator>下面可以包含两种子元素:field和validator1、前者field 是针对字段进行的校验;2、后者validator 是非字段或者说全局范围的校验。

在介绍完校验是怎么回事后,后面会简单比较一下两种校验方式的区别。

一、字段校验:(field)先看个基本示例<validators><field name="username"><field-validator type="requiredstring"><message key="ername.required"/></field-validator></field><field name="password"><field-validator type="stringlength"><param name="trim">true</param><param name="minLength">4</param><param name="maxLength">10</param><message>password should be ${minLength} to ${maxLength} characters lon g.</message></field-validator></field></validators>有几个地方需要注意一下的。

第15章struts2校验机制

第15章struts2校验机制

输入校验一、Struts2校验机制Struts2框架提供了优秀的校验机制,它们可以分为3部分:(1)内置校验器,对web应用开发中常见的校验功能进行了封装(2)校验规则声明,允许开发人员通过XML配置文件或者Java Annoation来引用内置校验器定义输入校验规则(3)校验拦截器,框架通过拦截器validation和workflow 来实现对输入信息的校验工作。

Validation拦截器根据校验规则声明调用内置拦截器实现校验工作,并负责维护创建一个字段相关的错误信息列表,workflow负责检查此错误信息列表,如果存在错误信息,则返回Action组件相关的input结果视图,并在返回的视图中显示相关的错误信息。

此外还支持开发人员定义自己的校验器。

类型转换和输入校验是Struts2框架对客户端提交信息进行处理的两个阶段。

客户端提交的信息首先进行类型转换,不管是否在转换过程中出现异常,都将进入输入校验阶段。

只有在类型转换和输入校验没有任何错误的情况下才会进入Action组件的业务逻辑处理。

二、利用Struts2框架实现校验【例子】【Quiz.jsp】<%@page contentType="text/html"pageEncoding="UTF-8"%><%@taglib prefix="s"uri="/struts-tags"%><!DOCTYPE HTML PUBLIC"-//W3C//DTD HTML 4.01Transitional//EN""/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type"content="text/html; charset=UTF-8"><title>问卷调查</title></head><body><H1>你喜欢的笔记本品牌</H1><s:fielderror/><s:form action="basicValidate"method="post" namespace="/validate"><s:textfield name="name"label="姓名"/><br><s:textfield name="age"label="年龄"/><br><s:textfield name="answer"label="笔记本品牌"/><br><s:submit value="提交"/></s:form></body></html>【Quiz_success.jsp】<%@page contentType="text/html"pageEncoding="UTF-8"%><%@taglib prefix="s"uri="/struts-tags"%><%@page isELIgnored="false"%><!DOCTYPE HTML PUBLIC"-//W3C//DTD HTML 4.01Transitional//EN""/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type"content="text/html; charset=UTF-8"><title>问卷结果</title></head><body>谢谢!<b><s:property value="name"/></b>你喜欢的笔记本品牌是:<b><s:property value="answer"/></b></body></html>【QuizAction.java】package my.ognl;import com.opensymphony.xwork2.ActionSupport;public class QuizAction extends ActionSupport{ private String name;private int age;private String answer;public String getName() {return name;}public void setName(String name) { = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getAnswer() {return answer;}public void setAnswer(String answer) {this.answer = answer;}}【QuizAction-validation.xml】<?xml version="1.0"encoding="UTF-8"?><!DOCTYPE validators PUBLIC"-//Apache Struts//XWork Validator 1.0.2//EN""/dtds/xwork-validator-1.0.2.dtd" ><validators><field name="name"><field-validator type="requiredstring"><message>用户名不可为空</message></field-validator></field><field name="age"><field-validator type="int"><param name="min">6</param><param name="max">120</param><message>年龄值超出合理范围</message></field-validator></field></validators>【struts.xml】<package name="mypack2"extends="struts-default"> <action name="basicValidate"class="my.ognl.QuizAction"method="execute"><resultname="success">/WEB-INF/page/Quiz_success.jsp</result><result name="input">/Quiz.jsp</result></action></package>测试地址栏输入http://localhost:8080/example_ch1/ Quiz.jsp如果不输入姓名,年龄输入200,笔记本品牌输入IBM,得到的结果为在与Action组件同样的package路径下寻找名为**-validation.xml的校验规则声明文件,其中**代表Action 组件的名称。

C05 Struts2的输入校验

C05 Struts2的输入校验

Struts2的输入校验
●注意事项:
⏹分析客户端校验和服务器端校验的不同,讲解服务器端校验的必要性
⏹讲解validate()方法的校验和validateXxx()方法的校验
⏹讲解Struts2提供的非侵入性校验框架
●PPT第2~3页:10分钟
⏹讲解输入校验的种类和常用方法,区分客户端和服务器的输入校验
⏹明确服务器端校验的必要性
●PPT第4~7页:20分钟
⏹validate()方法的使用
⏹struts.xml的配置
●PPT第8~11页:10分钟
⏹输入校验功能的测试,分析validate方法的原理
●PPT第12页:10分钟
⏹讲解<s:fielderror/>标签的作用
⏹使用<s:fielderror/>标签显示错误信息
●PPT第13~16页:20分钟
⏹讲解validateXxx()方法输入校验的使用
⏹相关配置,如struts.xml
⏹相关代码编写,引导学生完成
●PPT第17页:15分钟
⏹分析以上两种输入校验方式的缺点,主要是其侵入性,增加了代码之间的耦合度
⏹讲解Struts2基于框架文件的输入校验方式
⏹理解Struts2校验框架的优势
●PPT第18~24页:10分钟
⏹编写struts2的字段校验例子
⏹配置输入校验规则文件,xml格式,理解各配置项的意义和配置方法
⏹Action类依然需要继承ActionSupport类
●PPT第25~26页:10分钟
⏹编写struts2的非字段校验例子
⏹分析校验规则文件和前面校验方法内容,找出相同点。

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

直接使用Struts2框架来实现输入校验1 手动实现校验基本上都是在Action中完成校验的。

我们写的Action一定要继承自ActionSupportpublic class RegisterAction extends ActionSupport {public String execute() throws Exception{System.out.println("perform execute");return SUCCESS;}@Overridepublic void validate() {System.out.println("perform validate");}}先做一个简单的实验,发现validate方法在execute方法之前执行,那么就可以在validate 方法中完成校验逻辑。

这里我们千万注意一个问题,在执行validate之前,一定要确保所有的用户请求参数值一定都要能完全无误的转换过来(无论是使用Struts2内置转换器还是自定义转换器),否则的话,在执行validate 方法(如果有重写了validate方法,不管有没有在validate方法中添加错误)后系统就会跳转到INPUT逻辑视图名所指向的视图资源!!!!!!所以说只用在确保类型转换成功的情况下执行输入校验才有意义!!!!!!在执行validate方法时,只要我们在该方法中添加了Action或Field级别的错误,那么Action执行就此打住,直接跳转到INPUT指向的视图资源。

否则的话,所有验证都通过了才会执行execute方法。

public class RegisterAction extends ActionSupport {private String name;private int age;private Date birth;…省略了Getters和Setters方法public String execute() throws Exception{System.out.println("perform execute");return SUCCESS;}@Overridepublic void validate() {this.addFieldError("name", "name is error");this.addFieldError("age", "age is error");this.addFieldError("birth", "birth is error");}}这时候我们还要在Action中配置INPUT结果<action name="register"class="RegisterAction"><result>/index.jsp</result><result name="input">/index.jsp</result></action>在index.jsp页面中加入:<s:fielderror></s:fielderror>除了将验证逻辑封装在validate方法中,还可以放在validateXxx方法中为了能调用validateXxx方法,首先要调用Action中的xxx方法(Xxx和xxx只有首字母是否大小写的区别,其他一模一样),为了让Action一获取用户请求就执行xxx方法,首先要在action中配置method为xxx 如:public class RegisterAction extends ActionSupport {private String name;private int age;private Date birth;…省略了Getters和Setters方法public String execute() throws Exception{System.out.println("perform execute");return SUCCESS;}@Overridepublic void validate() {System.out.println("validate invoked");this.addFieldError("name", "name error");}public void validate Reg(){System.out.println("validateReg invoked");this.addFieldError("name", "name is error!!!!");}public String reg(){System.out.println("reg invoked");return SUCCESS;}这里的调用顺序是:validateReg()方法validate()方法reg()方法(只有前两个方法验证通过了才执行)使用配置文件来实现输入校验我们只要在Action中定义与用户请求参数对应的属性,并实现Getters和Setters方法在Action所在的包下面定义一个校验规则文件,文件名是:Action名字-validation.xml校验文件的内容是:<field name="用户请求参数名"><field-validator type="规则类型"><param name="参数名">参数值</param><message>错误消息</message></field-validator></field>常用的验证规则:字符串类型的验证:type param name value非空:requiredstring trim true || false正则:regex expression <![CDATA[( )]]>数字类型的验证:数值范围:int min numbermax number日期类型的验证:日期范围:date min yyyy-MM-ddmax yyyy-MM-dd注意非常重要的一点,在Struts2中数据校验是建立在类型转换的基础上的!!!对于任何表单域是空的情况,提交到服务器端的参数值都是空字符串!!!这样就存在类型转换失败的问题,因此说Struts2校验机制无法校验用户输入为空的情况!!!!这需要我们手动验证!!!!使用这种验证方式发现一个问题,就是日期类型的表单域无法验证输入为空的情况,还需要使用其他的验证方法。

使用国际化资源文件来显示错误信息可以在上面的<message>标签中使用这样的形式:<message key=”name” />的形式这里的key所表示的就是国际化资源文件中的name,这样我们只要在国际化资源文件中配置错误信息了使用客户端校验只需要将提交表单用Struts2标签来改写就行了,修改<s:form action=”register”validate=”true”>验证规则文件不要做任何变化Action中验证逻辑的分离一个Action中可以有多个类似于execute的方法,每个方法都对应一个校验规则文件,想要调用某种校验逻辑的时候可以在struts.xml文件中为action指定method属性,这时候的校验规则文件的命名就要注意了,Action名字-方法名-validation.xml,当调用method指定的方法时,就会综合Action名字-validation.xml和Action名字-方法名-validation.xml这两个校验规则文件来验证,一般是先验证前面的文件再验证后者如:MyAction-validation.xml文件的主要校验规则:<field name="name"><field-validator type="requiredstring"><param name="trim">true</param><message>姓名不能为空</message></field-validator><field-validator type="regex"><param name="expression"><![CDATA[(\w{4,8})]]></param><message>长度在4到8之间</message></field-validator></field><field name="age"><field-validator type="int"><param name="min">1</param><param name="max">150</param><message>年龄必须在1到150之间</message></field-validator></field>而MyAction-login-validation.xml文件的验证规则如下:<field name="name"><field-validator type="fieldexpression"><param name="expression"><![CDATA[(name == "hahaha" )]]></param> <message>姓名不正确</message></field-validator></field>校验规则如下:Action名字-方法名-validation.xml中有和Action名字-validation.xml相同的校验规则,前者会覆盖后者。

相关文档
最新文档