Jim Blog I've been trying so hard,but doesn't even matter
博客信息

Struts2基于注解的验证框架

发布时间:『 2018-04-10 18:04 』  博客类别:JavaWeb  阅读(114) 评论(0)

Struts2对数据的验证方式有好几种,可以简单的分为三类:

1.编程 2.xml配置 3.注解

一般应该是xml配置用得较多,但对比一下果然还是注解相对简单

要使用Struts2验证框架,我们需要在页面使用Struts2的各种标签,首先要引用标签库

<%@taglib uri="/struts-tags" prefix="s"%>

下面是要验证的输入框:

<s:form action="register" method="post">
                <table>
                      <tr>
                           <td>用户名:</td>
                           <s:textfield type="text" id="name" name="userName"></s:textfield>
                      </tr>
                      <tr>
                           <td><label>密码:</label></td>
                           <td><s:textfield type="password" id="password" name="password" /></td>
                      </tr>
                      <tr>
                           <td><label>确认密码:</label></td>
                           <td><s:textfield type="password" id="repassword" name="repassword" /></td>
                      </tr>
                      <tr>
                           <td>邮箱:</td>
                           <td><s:textfield type="text" id="email" name="email" /></td>
                      </tr>
                      <tr>
                           <td>电话:</td>
                           <td><s:textfield type="text" id="phone" name="phone" /></td>
                      </tr>
                      <tr height="10">
                           <td><button type="submit">注册</button></td>
                           <td><button type="reset">重置</button></td>
                           <td><button type="button"
                                      onclick="javascript:history.back()">返回</button></td>
                      </tr>
                </table>
           </s:form>


然后是Action类上的注解,写在要验证的方法上面(虽然作用于全体。。):

@Validations(
                requiredStrings={
                       @RequiredStringValidator(type=ValidatorType.SIMPLE,trim=true,fieldName="userName",message="请输入用户名"),
                       @RequiredStringValidator(type=ValidatorType.SIMPLE,trim=true,fieldName="password",message="请输入密码"),
                       @RequiredStringValidator(type=ValidatorType.SIMPLE,trim=true,fieldName="phone",message="请输入电话"),
                },stringLengthFields={
                      @StringLengthFieldValidator(type=ValidatorType.SIMPLE,fieldName="userName",maxLength="8",minLength="4",message="用户名长度为4-8位"),
                       @StringLengthFieldValidator(type=ValidatorType.SIMPLE,fieldName="password",maxLength="20",minLength="6",message="密码长度为6-20位"),
                },regexFields={
                       @RegexFieldValidator(fieldName="phone",regexExpression="^(\\+86|0|1)\\d{10,11}$", 
                                      message="电话号码格式不正确!"),
                },fieldExpressions={
                       @FieldExpressionValidator(fieldName="repassword",key="password",expression="repassword eq key",message="确认密码错误")
                },emails={
                           @EmailValidator(fieldName="email",message="邮箱格式错误")
                }
                )

需要注意的是验证注解会影响类里的所有方法,如果其他方法不需要注解,可以使用

@SkipValidation

跳过验证,如果需要开启方法级别的验证,可以通过配置文件配置。

当验证不通过时会返回input视图,我这边是直接返回到注册界面:

@Results({@Result(name = "input", location =
"/register.jsp") })

你也可以通过

@InputConfig(resultName="error")

自己配置要返回到的界面

 

上面注解的功能可以说很见名知意了,不过我在这里简单说说验证密码那个:

@FieldExpressionValidator

我在使用这个的时候模仿着xml配置的写法写了好几种验证方式,结果是行不通的,最后我发现了属性key,然后把密码的值传给key值与待确认密码比较,这样才能实现密码校对功能。


关键字:   Struts2     验证     JavaWeb  
博主信息
Jim
(生命,是一场徒劳的坚持)