`
baobeituping
  • 浏览: 1040901 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

Struts2 annotation方法验证

 
阅读更多

struts2的验证分为分编程式验证、声明式验证、注解式验证。因现在的人越来越懒,都追求零配置,所以本文介绍下注解式验证。

一.hello world

参考javaeye的这篇文章,按着做一次,起码有个初步印象

http://www.javaeye.com/wiki/taojintianxiastruts2/1650-17-7-note-the-use-of-struts2-validation

Validation使用名字叫做validator的Intercepter,在默认情况下,struts2已经定义了这个Intercepter,我们在不加声明的情况下就可以使用Validation了

如果是使用默认的拦截器,就已经开启了验证框架的了,直接用。

一般有两种注解法

1.直接注在get方法上面,像这种

@RequiredStringValidator(message="Supply password")
 
public String getPassword() {
        
return password;
    }
 
2.注在方法上面,like

@Validations(
requiredStrings={
@RequiredStringValidator(fieldName="username",message="用户名不能为空!"),
@RequiredStringValidator(fieldName="telNum",message="电话号码不能为空!")
},
regexFields={@RegexFieldValidator(fieldName="telNum",expression="^(\\+86|0|1)\\d{10,11}$",
message="电话号码格式不正确!")}
)
 
但无论是哪种注解,默认情况下都是对这个action的所有方法进行验证。

如果验证不通过,将跳回result name 为 “input”的视图。错误信息是在 FieldError 里, 当然我们也可以用@InputConfig(resultName=“xxx”),设置验证不通过跳回的视图.

@SkipValidation 如果某个方法不想验证,那么就可以用这个标签了

 

默认配置下,验证框架是对所有方法都进行了验证,其实我们可以对不需要验证的方法上写了@SkipValidation注解。。但这样又出现了问题,若有两个方法都需要进行验证但参数又不相同,那怎么办呢?那就是开启方法级别的验证啦

 

二.开启方法级别的验证

开 启方法级别的验证只需要配置struts2的validation interceptor的一个参数validateAnnotatedMethodOnly为true即可。 默认情况下struts2的配置中没有配置这个参数,所以需要我们自己重新配置一下defaultStack:

<package name="yybean-default" extends="struts-default" abstract="true">
        <interceptors>
            <interceptor-stack name="defaultStack">
                <interceptor-ref name="exception"/>
                <interceptor-ref name="alias"/>
                <interceptor-ref name="servletConfig"/>
                <interceptor-ref name="prepare"/>
                <interceptor-ref name="i18n"/>
                <interceptor-ref name="chain"/>
                <interceptor-ref name="debugging"/>
                <interceptor-ref name="profiling"/>
                <interceptor-ref name="scopedModelDriven"/>
                <interceptor-ref name="modelDriven"/>
                <interceptor-ref name="fileUpload"/>
                <interceptor-ref name="checkbox"/>
                <interceptor-ref name="staticParams"/>
                <interceptor-ref name="params">
                    <param name="excludeParams">dojo\..*</param>
                </interceptor-ref>
                <interceptor-ref name="conversionError"/>
                <interceptor-ref name="validation">
                    <param name="excludeMethods">input,back,cancel,browse</param>
                    <param name="validateAnnotatedMethodOnly">true</param>
                </interceptor-ref>
                <interceptor-ref name="workflow">
                    <param name="excludeMethods">input,back,cancel,browse</param>
                </interceptor-ref>
            </interceptor-stack>
        </interceptors>
        <default-interceptor-ref name="defaultStack"/>
    </package>
其中重点就是

<!--开启方法级别的验证-->
  <interceptor-ref name="validation">
      <param name="excludeMethods">input,back,cancel,browse</param>
      <param name="validateAnnotatedMethodOnly">true</param>
  </interceptor-ref>
还有excludeMethods,这些方法都是不会执行验证的。

开启方法级别的验证后,对于不需要进行验证的方法没必要使用@SkipValidation注解。

三.常见的注解

注解

相应的XML

描述

RequiredFieldValidator

required

确保该属性不是null

RequiredStringValidator

requiredstring

确保一个String类型的属性不是null,并且非空

StringLengthFieldValidator

stringlength

检查String的长度范围是否与所期望的一致

IntRangeFieldValidator

int

检查int类型的数字是否超出所期望的大小范围

DoubleRangeFieldValidator

double

检查double类型的数字是否超出所期望的大小范围

DateRangeFieldValidator

date

检查date类型的属性是否超出所期望的范围

ExpressionValidator

expression

使用值栈来估算一个ONGL表达式(必须要返回boolean值)

FieldExpressionValidator

fieldexpression

使用OGNL表达式来验证字段

EmailValidator

email

保证该属性是一个有效的email地址

UrlValidator

url

保证该属性是一个有效的URL

ConversionErrorFieldValidator

conversion

检查该属性是否有转换错误

RegexFieldValidator

regex

检查该属性的值是否与某个正则表达式相匹配。

VisitorFieldValidator

visitor

把对字段的验证动作推迟到这个字段所属的类的特有的另一个验证文件中执行。

StringRegexValidator

n/a

检查字符串是否与正则表达式匹配

CustomValidator

n/a

表示使用了一个自定义的validator

ValidationParameter

n/a

作为CustomValidator 注解的一个参数

Validation

n/a

表示该类使用了基于注解的验证——这个注解可以与接口或类一起使用

Validations

n/a

用来对一个属性或类组合使用多种验证

分享到:
评论

相关推荐

    使用struts2的annotation验证

    博文链接:https://flym.iteye.com/blog/174358

    Struts2入门教程(全新完整版)

    十二、总结 本教程对struts2的基本知识进行了一些说明,关于struts2的更多详细内容应参看struts2的官方文档及提供的app实例。 下面对struts2的基本执行流程作一简要说明,此流程说明可以结合官方提供的struts2结构图...

    深入浅出struts2

    为了达成这一目标,Struts2中提供了很多新特性,比如智能的默认设置、annotation的使用以及“惯例重于配置”原则的应用,而这一切都大大减少了XML配置。Struts2中的Action都是POJO,这一方面增强了Action本身的可...

    基于spring,struts(struts2),hibernate的web项目脚手架

    generator,极易进行二次开发 struts1,struts2的零配置 spring集成及加强,自动搜索hibernate的entity annotation class 集成动态构造sql的工具:rapid-xsqlbuilder 集成javascript表单验证:rapid-validation 集成...

    低清版 大型门户网站是这样炼成的.pdf

    (Struts 2+Spring 2+Hibernate 3).pdf(完整版) 网上有高清版350M的。可以去下 http://115.com/file/be5gwid8 请于下载后 24H 内及时删除!请抱着学习的态度下载此资料。 总共900多页!!!!!!! 第1篇 ...

    Struts2注解

    配置web.xml,加入注解,验证注解,Convention的Annotation ,、与Result配置相关的Annotation

    Spring2.5+Struts2.0+hibernate3.0+Dwr+jquery+displayTag

    2 利用struts2 的LoginAction-validation.xml 3 在bean里把service包;暴露DWR,写了一个验证用户名的流程 4 采用jpa作为POJO,还是减少配置 5 加入display的分页,并且是物理分页 打开后自已建表sql.txt jdbc....

    java命名规范 开发规范

    6. 验证代码质量的约定,如JUnit、EMMA、FindBugs、CheckStyle、PMD的使用;Hudson持续集成需注意的; 7. 压力测试、防内存泄漏测试; 基础CSS:标签的各种状态的样式;表格单双行的样式; 开发一个Action请求的...

    java web 开发详解

    Struts 2  优点: 架构简单——易于扩展 标记库很容易利用FreeMarker或者Velocity来定制 基于控制器或者基于页面的导航 缺点: 文档组织得很差 对新特征过分关注 Tapestry  优点: 一旦学会它,将极大地提高生产率...

    iuhyiuhkjh908u0980

    本章我们将会开发基于Struts2框架的Hello World.我们的Hello World程序是你开发基于Struts2框架程序的第一步.这里我们会提供循序渐进的教程来开发基于Struts2框架的Hello World程序. 教程包含基本的步骤像创建目录...

    java开源包2

    JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (&lt;jcaptcha:image label="Type the text "/&gt; ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...

    经典JAVA.EE企业应用实战.基于WEBLOGIC_JBOSS的JSF_EJB3_JPA整合开发.pdf

     国内知名的高端IT技术作家,已出版《Spring 2.0宝典》、《基于J2EE的Ajax宝典》、《轻量级J2EE企业应用实战》、《Struts 2权威指南》、《Ruby On Rails敏捷开发最佳实践》等著作。 目录: 第0章 学习Java...

    教学设备管理系统

    采用Struts2.0+hibernate3.3+spring2.5框架开发。其中使用了hibernate的注解方式。因为是快速开发,使用了hibernate的自动见表语句。里面有一些相应的见表脚本,不完整。 该系统分为管理员系统和用户系统两部分。...

    JAVA上百实例源码以及开源项目源代码

    2个目标文件,FTP的目标是:(1)提高文件的共享性(计算机程序和/或数据),(2)鼓励间接地(通过程序)使用远程计算机,(3)保护用户因主机之间的文件存储系统导致的变化,(4)为了可靠和高效地传输,虽然用户...

    J2EE学习笔记(J2ee初学者必备手册)

    第三章 Action,Result & Struts2 Tag Library......................267 第四章 Data Transfer & Type Converter..273 第五章 Validation(数据格式验证)..276 第六章 Internationalization(I18N:国际化).............

    java开源包1

    JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (&lt;jcaptcha:image label="Type the text "/&gt; ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...

    java开源包11

    JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (&lt;jcaptcha:image label="Type the text "/&gt; ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...

    java开源包3

    JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (&lt;jcaptcha:image label="Type the text "/&gt; ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...

Global site tag (gtag.js) - Google Analytics