Struts2 validation验证讲解(annotaion方式)

我们可以在需要验证的方法上写上以下注解:

@Validati*****(requiredStrings = { 
        @RequiredStringValidator(fieldName = "oldPassword", message = "旧密码不允许为空!"),
        @RequiredStringValidator(fieldName = "newPassword", message = "新密码不允许为空!")},
    stringLengthFields = {
        @StringLengthFieldValidator(fieldName = "newPassword", minLength = "4", maxLength = "20", message = "新密码长度只允许为4-20!")})

@RequiredStringValidator代表进行字符串非空验证,fildName是指需要验证的参数名称,message为验证失败后显示的信息。
其实struts2中内置了很多验证方法,稍后会将这些方法列出来。

写到这里,肯定有很多朋友会出现这样的问题:以上代码并不是只针对单个方法进行验证,而是对所有方法都进行了验证,其实我们可以对不需要验证的方法上写了@SkipValidation注解。。但这样又出现了问题,若有两个方法都需要进行验证但参数又不相同,那怎么办呢?
这样我们就需要配置struts2的validation interceptor的一个参数validateAnnotatedMethodOnly为true即可。
默认情况下struts2的配置中没有配置这个参数,所以需要我们自己重新配置一下defaultStack:

代码如下:

<interceptors>
    <interceptor-stack name="defaultParentStack">
        <interceptor-ref name="exception"/>
        <interceptor-ref name="alias"/>
        <interceptor-ref name="servletConfig"/>
        <interceptor-ref name="i18n"/>
        <interceptor-ref name="prepare"/>
        <interceptor-ref name="chain"/>
        <interceptor-ref name="debugging"/>
        <interceptor-ref name="scopedModelDriven"/>
        <interceptor-ref name="modelDriven"/>
        <interceptor-ref name="fileUpload"/>
        <interceptor-ref name="checkbox"/>
        <interceptor-ref name="multiselect"/>
        <interceptor-ref name="staticParams"/>
        <interceptor-ref name="actionMappingParams"/>
        <interceptor-ref name="params">
          <param name="excludeParams">dojo\..*,^struts\..*</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>

最后将这个interceptors设置为默认拦截器栈即可:

<default-interceptor-ref name="defaultParentStack" />

注意:将validateAnnotatedMethodOnly参数设置为true后,对于不需要进行验证的方法没必要使用@SkipValidation注解。

此外,我们还可以在方法上配置@InputConfig(resultName = "error")可以配置验证失败后跳转的URL。
具体代码可以参考SHOP++源代码。

Struts2内置验证方法:
@RequiredFieldValidator:字符串非空验证
@EmailValidator:E-mail验证
@UrlValidator:Url验证
@StringLengthFieldValidator:字符串长度验证
@intRangeFields:数值大小验证
@dateRangeFields:日期验证
@RegexFieldValidator:正则表达式验证


SHOP++验证实例:

@InputConfig(resultName = "error")
    @Validati*****(requiredStrings = {
            @RequiredStringValidator(fieldName = "member.username", message = "用户名不允许为空!"),
            @RequiredStringValidator(fieldName = "member.password", message = "密码不允许为空!"),
            @RequiredStringValidator(fieldName = "member.email", message = "E-mail不允许为空!")},
            requiredFields = {
            @RequiredFieldValidator(fieldName = "isAgree", message = "必须同意服务协议!")},
            stringLengthFields = {
            @StringLengthFieldValidator(fieldName = "member.username", minLength = "2", maxLength = "20", message = "用户名长度必须在${minLength}到${maxLength}之间!"),
            @StringLengthFieldValidator(fieldName = "member.password", minLength = "4", maxLength = "20", message = "密码长度必须在${minLength}到${maxLength}之间!")},
            emails = {
            @EmailValidator(fieldName = "member.email", message = "E-mail格式错误!")},
            regexFields = {
            @RegexFieldValidator(fieldName = "member.username", expression = "^[0-9a-z_A-Z\u4e00-\u9fa5]+$", message = "用户名只允许包含中文、英文、数字和下划线!")}

    )


来源:http://blog.sina.com.cn/s/blog_7085382f0100uep5.html

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值