Struts2输入校验

1、Struts2输入校验介绍html

Struts2提供了功能强大的输入校验机制,经过Struts2内建的输入校验器,应用无需书写任何代码,便可完成大部分的校验功能,并能够同时完成客户端和服务器端的校验。若是应用的输入校验规则特别,Struts也容许经过重写validate方法来完成自定义校验。java

Struts2中能够经过重写validate方法来完成输入校验。若是咱们重写了validate方法,则该方法会应用于此Action中的全部提供服务的业务方法。Struts2支持校验特定方法的validateXxx()方法。例如某个Action中有一个save()业务方法,咱们能够写一个validateSave()方法来进行save()的特殊校验,客户端请求调用的次序以下:正则表达式

validateSave()--------------àvalidate()------------àsave()express

Struts2的输入校验流程以下:服务器

1.       类型转换器负责对字符串的请求参数执行类型转换,并将这此值设置成Action的属性值。ui

2.       在执行类型转换器过程当中可能出现异常,若是出现异常,将异常信息保存到ActionContext中,conversionError拦截器负责将其封装到fieldError里,而后执行第3步;若是转换过程没有异常信息,则直接进入第3步。url

3.       经过反射嗲用validateXxx()方法,其中Xxx是即将处理用户请求的处理逻辑所对应的方法名。spa

4.       经过Action类里的validate()方法code

5.       若是通过上面4步都没有出现fieldError,将调用Action里处理用户的处理方法;若是出现了fieldError,系统将转入input逻辑视图所指定的视图资源。orm

2、Struts2输入检验

1.       最基础的Struts输入检验

Struts2中单独对每个Action指定一个校验文件,它的命名方式ActionName-validate.xml。他存放在与Action相同的保重,校验只须要配置一个校验文件便可实现。系统的其余地方不须要改动,系统自动加载该文件。校验PersonAction-validate.xml以下例:

  1. <?xml version="1.0" encoding="UTF-8"?>

  2. <!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.3//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.3.dtd">

  3. <!--校验文件的根元素-->

  4. <validators>

  5. <!--校验Action的username属性-->

  6.    <field name="username">

  7. <!--指定username属性必须知足必填规则-->

  8.        <field-validator type="requiredstring">

  9.            <!--校验去掉username属性的先后空格-->

  10.            <param name="trim">true</param>

  11.            <!--提示信息-->

  12.            <message>用户名不能为空!</message>

  13.        </field-validator>

  14.    </field>

  15.    <field name="mobile">

  16.        <field-validator type="requiredstring">

  17.            <param name="trim">true</param>

  18.            <message>手机号不能为空!</message>

  19.        </field-validator>

  20.        <!—指定手机号必须知足匹配指定的正则表达式-->

  21.        <field-validator type="regex">

  22.            <param name="expression"><![CDATA[^1[358]\\d{9}$]]></param>

  23.            <message>手机号格式不正确!</message>

  24.        </field-validator>

  25.    </field>

  26. </validators>

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.3//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.3.dtd">
<!--校验文件的根元素-->
<validators>
<!--校验Action的username属性-->
    <field name="username">
<!--指定username属性必须知足必填规则-->
        <field-validator type="requiredstring">
            <!--校验去掉username属性的先后空格-->
            <param name="trim">true</param>
            <!--提示信息-->
            <message>用户名不能为空!</message>
        </field-validator>
    </field>
    <field name="mobile">
        <field-validator type="requiredstring">
            <param name="trim">true</param>
            <message>手机号不能为空!</message>
        </field-validator>
        <!—指定手机号必须知足匹配指定的正则表达式-->
        <field-validator type="regex">
            <param name="expression"><![CDATA[^1[358]\\d{9}$]]></param>
            <message>手机号格式不正确!</message>
        </field-validator>
    </field>
</validators>

上面的配置文件的编写是对Action中全部的的方法进行了校验,若是想要对指定的Action中的方法进行校验,只要将将配置文件的命名改成ActionName-xxx-validate.xml便可。

2.       Struts2中输入校验提示信息的国际化

在Struts2的校验中应用国际化也很是简单,请看以下xml配置代码

  1. <field name="username">

  2.        <field-validator type="requiredstring">

  3.            <param name="trim">true</param>

  4.            <message key=”username.requied”> </message>

  5.        </field-validator>

  6. </field>

  7. <field name="mobile">

  8.        <field-validator type="requiredstring">

  9.            <param name="trim">true</param>

  10.            <message>手机号不能为空!</message>

  11.        </field-validator>

  12.        <field-validator type="regex">

  13.            <param name="expression"><![CDATA[^1[358]\\d{9}$]]></param>

  14.            <message key=”mobile.regex”> </message>

  15.    </field-validator>

  16. </field>

  17. <span style="font-family: Arial; background-color: rgb(255, 255, 255);"></span>

<field name="username">
        <field-validator type="requiredstring">
            <param name="trim">true</param>
            <message key=”username.requied”> </message>
        </field-validator>
</field>
<field name="mobile">
        <field-validator type="requiredstring">
            <param name="trim">true</param>
            <message>手机号不能为空!</message>
        </field-validator>
        <field-validator type="regex">
            <param name="expression"><![CDATA[^1[358]\\d{9}$]]></param>
            <message key=”mobile.regex”> </message>
    </field-validator>
</field>

Message元素指定key属性指定的是国际化资源中对应的key。还能够使用一下配置国际化资源中的信息:<message>${getText(“username.requried”)}</message>这种方式是经过调用ActionSupport类中getText()方法来获取国际化资源的。

三、 Struts2中应用客户端输入校验

使用客户端输入校验能够减轻服务器的负担。 Struts2 对客户端的输入校验进行了封装,使得咱们开发时特别容易。

  1. <%@ page language="java" contentType="text/html; charset=UTF-8"   pageEncoding="UTF-8"%>

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

  3. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

  4. <html>

  5.         <head>

  6.         <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

  7.         <title>注册页面</title>

  8.    </head>

  9.    <body>

  10.         <s:form action="save" validate="true">

  11.         <s:textfield label="用户名" name="name"></s:textfield>

  12.         <s:password label="密码" name="pass"></s:password>

  13.         <s:textfield label="年龄" name="age"></s:textfield>

  14.         <s:textfield label="生日" name="birth"></s:textfield>

  15.         <s:submit></s:submit>

  16.         </s:form>

  17.    </body>

  18. </html>

  19. <span style="font-family: Arial; background-color: rgb(255, 255, 255);"></span>

<%@ page language="java" contentType="text/html; charset=UTF-8"   pageEncoding="UTF-8"%>  
<%@taglib prefix="s" uri="/struts-tags" %> 
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
 <html>  
         <head>  
         <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
         <title>注册页面</title>  
    </head> 
    <body>  
         <s:form action="save" validate="true">  
         <s:textfield label="用户名" name="name"></s:textfield>  
         <s:password label="密码" name="pass"></s:password>  
         <s:textfield label="年龄" name="age"></s:textfield>  
         <s:textfield label="生日" name="birth"></s:textfield>  
         <s:submit></s:submit> 
         </s:form>
    </body>  
</html>

注意这里要用Struts2的标签,form的validate属性要设置为true,而且不要将theme属性指定为simple(simple表示struts2将把这个解析成普通的HTML标签)

2.校验配置文件:这里的校验配置文件同原先的配置文件并无不一样,可是这里使用<message key=”name.requried”/>没法从全局国际化资源中获取信息,只能使用<message>${getText(“name.requried”)}</message>方式获取国际化资源。

在Struts2中并非全部的服务器端校验均可以转换成客户端校验。客户端校验仅仅支持以下校验器:

required validator 必填校验器

requiredstring validator 必填字符串校验器

stringlength validator 字符串长度校验器

regex validator 正则表达式校验器

email validator 邮件校验器

url validator 网址校验器

int validator 整数校验器

double validator 双精度数校验器 。

3、多个校验器规则文件的搜索次序

例若有一个 LoginAction 继承 BaseAction ,这两个 Action中都有业务方法 login ,而且存在 4 份校验规则文件以下: BaseAction-vadition.xml, BaseAction-login-validation.xml , LoginAction-validation.xml, LoginAction-login-validation.xml 那么用户访问 LoginAction 的 login 方法里,会按照以上的顺序执行校验规则,实际的校验规则是以上四个校验规则的总和,可是若是存在冲突的状况下,后面的校验规则优先。

4、短路校验器的配置

Struts2 默认的校验配置是非短路的方式,即把一个字段全部的不符合要求的提示都提示用户,咱们也能够配置以短路的方式提示用户,即当用户输入的条件不知足第一次校验的时候就返回提示信息,再也不往下执行。这种配置方式只能是以字段为基础的校验器。只须要在 <field-validator> 元素上加上 short-circuit="true" 便可,例如:

  1. <field name="name">

  2.    <field-validator type="requiredstring" short-circuit="true">

  3.       <param name="trim">true</param>

  4.       <message>${getText("name.requried")}</message>

  5.    </field-validator>

  6.    <field-validator type="regex">

  7.       <param name="expression"><![CDATA[(\w{4,25})]]></param>

  8.       <message>${getText("name.regex")}</message>

  9.    </field-validator>

  10. </field>

相关文章
相关标签/搜索