在Struts2应用中提供验证的方式有两种——编程式和声明式。
编程式验证
要提供编程式验证的话,action就要实现Validateable接口。该接口只有一个方法,在方法中需要执行验证操作:void validate();
为了将验证中出现的问题反馈给用户,action还需要实现ValidationAware接口。这个接口更为复杂一些,它里面的方法可以用来添加验证错误,判断当前是否有验证错误,等等。
如果可能的话,你的action可以继承ActionSupport类,在该类中提供了以上这些接口的缺省实现。只有当验证操作极其复杂的时候,我们才该使用编程式验证。更好的解决方案是采用声明式验证。下面是一个编程式验证的小例子:
public class UserAction extends ActionSupport{
private String userName;
private String password
public void validate() {
if(userName ==null || userName.trim().equals("")){
this.addFieldError("userName", "用户名不能为空");
// this.addFieldError("userName", this.getText("error.login.username.null"));
//从配置文件得到数据
}else if(!Pattern.matches( "^[a-zA-Z][a-zA-Z0-9_]{3,14}$" , userName)){
this.addFieldError("userName", "用户名必须以字母开始,字母、数字或_, ");
// this.addFieldError("userName", this.getText("error.login.username.match"));
}
if(password == null || password.equals("")){
this.addFieldError("password", "密码不能为空");
// this.addFieldError("password", this.getText("error.login.password.null"));
}else if(!Pattern.matches("^[a-zA-Z0-9!@#]{4,15}$", password)){
this.addFieldError("password", "密码可以由字母、数字和! @ # 组成 ");
// this.addFieldError("password", this.getText("error.login.password.match"));
}
}
public String login() throws Exception {
if(this.hasFieldErrors()){ //判断是否有错误信息
return INPUT;
}
return SUCCESS;
}
}
|
验证会与执法方法配置:比如:login
它的执行顺序为:validate() à validateLogin()
声明式验证
每一个需要声明式验证的action都需要在类中进行注解或者要有一个相应的XML文件。对于MyAction这个类,其XML文件就是“MyAction-validation.xml”,并会和它放在同一个包(package)下面。处理这个action的拦截器栈需要包含有“validation”(用来进行验证)和“workflow”(当验证失败时用来进行重定向,以返回到“input”结果)拦截器。这样的拦截器栈有以下几个:“validationWorkflowStack”,“paramsPrepareParamsStack”,“defaultStack”和“completeStack”。
下面是验证文件的一个例子:
<!DOCTYPE validators
PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN"
"http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
<validators>
<field name="count">
<field-validator type="int" short-circuit="true">
<param name="min">1</param>
<param name="max">100</param>
<message key="invalid.count">
Value must be between ${min} and ${max}
</message>
</field-validator>
</field>
<field name="name">
<field-validator type="requiredstring">
<message>You must enter a name.</message>
</field-validator>
</field>
<validator type="expression" short-circuit="true">
<param name="expression">email.equals(email2)</param>
<message>Email not the same as email2</message>
</validator>
</validators>
|
1、 每一个字段都可以含有一个或多个“field-validator”节点
2、 每一个字段的validator是按照定义顺序执行的
3、 每一个字段的validator都有一个“short-circuit”属性;如果其值为true而验证失败,那么剩下的所有验证都会被跳过,该字段就会直接返回一个失败的结果
4、 Message节点可以包含一个“key”属性,用来从message bundle中查找需要显示给用户的消息;如果找不到对应的message bundle key的话,那么就返回节点的value属性的值
5、 Validator的配置信息(例如min和max)和值栈中的值一样,都可以通过把值放在“${”和“}”之间,来显示到验证消息中。
6、 Validators 的作用域可以是“field”或者“expression”;具有“expression”作用域的validator可以同时作用于多个字段
下面是关于validator类型和相应描述的一个完整列表。在http://struts.apache.org/2.x/docs/validation.html可以得到包括配置相关的更多信息。
名称
|
描述
|
required
|
确保该属性不是null
|
requiredstring
|
确保一个String类型的属性不是null,并且非空
|
stringlength
|
检查String的长度范围是否与所期望的一致
|
int
|
检查int类型的数字是否超出所期望的大小范围
|
double
|
检查double类型的数字是否超出所期望的大小范围
|
date
|
检查date类型的属性是否超出所期望的范围
|
expression
|
使用值栈来估算一个ONGL表达式(必须要返回boolean值)
|
fieldexpression
|
使用OGNL表达式来验证字段
|
email
|
保证该属性是一个有效的email地址
|
url
|
保证该属性是一个有效的URL
|
conversion
|
检查该属性是否有转换错误
|
regex
|
检查该属性的值是否与某个正则表达式相匹配。
|
visitor
|
Visitor validator可以把对字段的验证动作推迟到这个字段所属的类的特有的另一个验证文件中执行。
比如说,你在使用模型驱动的action,在模型中有一个对应于Person类的“person”属性。如果该模型正在被多个Action使用,那么你大概就会想要把验证信息抽取出来进行重用。Visitor 验证提供了这样的功能
|
另外,你还可以创建自己的validator。你自定义的validator需要实现Validator接口(用于表达式验证)或FieldValidator接口(用于字段验证)。
新的validator需要在“validators.xml”中注册,该文件存在于classpath的根目录下。通常这个文件可以从发行的JAR包中访问到,但是如果人为提供了这个文件的话,那么发行包中的文件就会被忽略。所以在添加新的validator之前,你需要从Struts2 JAR包中把“validators.xml”这个文件拷贝出来,放到项目classpath的根目录下,然后再把新的validator添加进去。这样当前已有的validator才会被包含到应用中来。和其他配置一样,validator的配置信息也很简单,只需要一个统一标识符和validator的类名。
<validators>
<validator name="postcode" class="com.validators.PostCodeValidator"/>
…
</validators>
|
分享到:
相关推荐
struts2官方例子7-表单验证 xml形式的验证,主要是在相应的action类旁,新建一个对应的xml文件,进行验证
在实际的开发项目中,我们通常采用的是js对我们输入的值进行验证,例如,用户名的长度,密码长度,等等。但是这样做,不好之处就是我们可以...本附件为【Struts2】★☆之struts2对Action提交方法进行验证,下载源码!
10.1.2 Struts 2工作流中的验证框架 219 10.2 将动作关联到验证框架 222 10.2.1 使用ActionClass-validations.xml声明验证元数据 223 10.2.2 研究内建的验证器 226 10.3 编写自定义验证器 227 10.3.1 检查密码强度的...
01 Struts2-Action 5 一、 Struts作用: 5 二、 搭建Struts2的运行环境: 5 三、 Namespace 6 四、 标签 6 五、 Action 6 六、 路径问题的说明 8 七、 Action的动态调用方法 8 八、 Action通配符(wildcard)的配置 9 ...
01 Struts2-Action 5 一、 Struts作用: 5 二、 搭建Struts2的运行环境: 5 三、 Namespace 6 四、 标签 6 五、 Action 6 六、 路径问题的说明 8 七、 Action的动态调用方法 8 八、 Action通配符(wildcard)的配置 9 ...
struts2对action中的所有方法进行校验
Struts2 的拦截器用于拦截用户的请求和响应,包括身份验证、日志记录、缓存等。拦截器可以通过在 struts.xml 文件中配置或在 Action 中通过注入拦截器来实现。 8. Struts2 的国际化和本地化: Struts2 的国际化和...
Struts2的Action多个方法配置和验证实例 博文链接:https://zmx.iteye.com/blog/452289
建立一个Struts2 工程,用Action的属性接收参数,使用Domain Model (实体模型) 接收参数,Struts2_2.1.6版本的中文问题,Struts模块包含,Struts简单数据验证 ,Struts ValueStack(值栈) Debug,Value Stack ...
J2EE Struts Form验证与Action验证(简单计算器)
十二、总结 本教程对struts2的基本知识进行了一些说明,关于struts2的更多详细内容应参看struts2的官方文档及提供的app实例。 下面对struts2的基本执行流程作一简要说明,此流程说明可以结合官方提供的struts2结构图...
3.2. Struts2的Action调用业务逻辑 - 19 - 3.2.1. 登录Action--OpenIDLoginAction - 19 - 3.2.2. 进入的Action—FirstPageAction - 20 - 3.3. JSP页面 - 20 - 3.4. 运行示例 - 21 - 3.4.1. 登录 - 21 - 3.4.2. ...
struts2验证框架 在包下创建Action.validation.xml启动框架验证
这个validate验证框架中的actiionerror级别的错误的验证提示,并包含了如何在一个Action中处理多个业务逻辑,(struts1.x 中的DispatcheAction),例子比较简单,希望对大家学习struts有所帮助。
Struts2 中的验证逻辑编写在 Action 中. 4、Struts1 中, Action 类必须继承 org.apache.struts.action.Action 类; Struts2 中任何一个 POJO 都可以是一个 Action 类. 5、Struts2 在页面里使用 OGNL 来显示各种对象...
在Struts2中验证真的比较容易,可以在Action中直接写validate,也可以使用validate框架进行验证,这个我觉得比Struts1.x方便了很多,但是有个问题一直困扰了我,直到现在有个小程序要用到这个方面的知识,那就是...
struts2最全验证框架...Struts2Validator Struts2 验证框架 Updated Jun 18, 2010 by cm2...@gmail.com Action 配置中一定要设置 input 返回页面 添加验证只要创建验证的...
、Struts2 主要几句话: 1、Struts2 是由webwork2 发展来的而非Struts1,...7、Struts2 的输入验证可以对指定方法进行验证,解决Struts1 之痛 8、Struts2 提供了全局范围、包范围和Action 范围的国际化资源文件管理实现
Struts高级部分(2)(常用Action、验证框架、动态Form) 很不错的资料啊。,可帮助大家解决很多捆难。。
使用struts1框架实现用户登录,那么就需要新建两个类,比如:LoginForm、LoginAction继承ActionForm、Action,配置struts-config.xml配置文件