`
baobeituping
  • 浏览: 1067930 次
  • 性别: 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 hibernate3 spring2.5 annotation 整合

    Struts2、Hibernate3和Spring2.5是Java Web开发中的三大框架,它们各自负责不同的职责,但可以协同工作以构建高效的企业级应用。这里主要讨论的是如何将这三者结合,并利用注解(Annotation)进行配置,以简化开发...

    struts annotation Hello World

    此外,Struts 2还提供了其他注解,例如`@Namespace`用于定义Action的命名空间,`@ParentPackage`用于继承现有的配置包,`@SkipValidation`用于跳过特定Action的方法验证等。 为了运行这个"Hello World"应用,你需要...

    struts2 interceptor annotation plugin

    而"struts2 interceptor annotation plugin"则是Struts2框架提供的一种使用注解来配置拦截器的方式,这种方式更加简洁、直观,减少了XML配置文件的复杂性。 注解(Annotation)是Java编程语言的一个重要特性,它...

    struts annotation.ppt

    Struts2注解是Java开发框架Struts2中的一种特性,它引入了JDK1.5及更高版本的注解(Annotation)概念,使得开发者能够更简洁地配置Struts2框架,减少XML配置文件的使用,提高开发效率。注解提供了一种方式,将元数据...

    struts2表单验证

    2. Annotation配置:通过在Action类的属性上使用注解(@Validated、@FieldMatch等)来定义验证规则,简洁且易于维护。 三、字段验证 1. 必填字段:使用`required`验证器,确保字段非空。 2. 数据类型:例如,`int`, `...

    struts2大部分知识点学习(annotation版)

    在这个“struts2大部分知识点学习(annotation版)”中,我们将聚焦于使用注解(Annotation)来配置Struts2的应用,而不是传统的XML配置方式。注解在现代Java开发中扮演着重要角色,它们提供了更简洁、更直观的代码...

    struts2权威指南光盘源码-第18章源码

    第18章的源码主要涵盖了Struts2与Struts1的集成以及Struts2的验证机制。以下是这些源码中涉及的关键知识点: 1. **Struts2与Struts1的集成**: - **`struts2struts1`** 模块:这部分源码可能包含了如何在Struts2...

    如何自定义Struts2表单验证后的错误信息显示格式/样式

    Struts2支持两种主要的验证方式:基于注解的验证(Annotation-based validation)和基于XML的验证(XML-based validation)。这两种方式都可以在Action类或者单独的Validator XML文件中定义验证规则。 1. **基于...

    struts2 spring2.5 hibernate3.0 annotation 整合

    Struts2、Spring2.5和Hibernate3.0是Java Web开发中三个非常重要的框架,它们各自负责不同的职责,但可以协同工作以构建高效、可维护的Web应用程序。本项目整合了这三个框架,并利用注解(Annotation)进行配置,...

    Struts2 注解 Demo

    import org.apache.struts2.convention.annotation.Action; import org.apache.struts2.convention.annotation.Result; public class HelloWorldAction { @Action(value = "hello-world") @Result(name = ...

    struts 拦截器,扩展,以及java annotation

    - 拦截器是Struts2的核心组件之一,它们是基于Java的动态代理机制实现的。在Action调用前后,拦截器可以执行一系列预定义的任务,如日志记录、权限验证、数据校验等。 - 拦截器链是由多个拦截器按照特定顺序组成的...

    struts2注解必须包

    在Struts2中,注解(Annotation)是开发者常用的一种元数据表示方式,它允许我们在代码中直接标注信息,简化配置文件。"struts2注解必须包"指的是Struts2提供的一系列注解,它们对于简化Struts2应用的配置和增强其...

    struts2-core-2.0.11源码

    10. **注解支持(Annotations)**:从Struts2.1版本开始,框架引入了注解支持,允许开发者在Action类和方法上使用注解进行配置,这部分代码位于`org.apache.struts2.convention.annotation`包中。 在研究源码时,...

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

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

    struts2注解详解

    5. **调试与验证**:为了方便开发者调试和验证 Convention 插件的效果,Struts2 提供了一个名为 ConfigBrowser 的工具。这个工具可以帮助开发者查看当前应用的所有 Action 名称及其对应的配置信息。只需要将 `struts...

Global site tag (gtag.js) - Google Analytics