Struts2(服务器端)输入校验

来源:互联网 发布:江苏软件考试网 编辑:程序博客网 时间:2024/04/19 23:36

Struts2(服务器端)输入校验

struts服务器正则表达式actioninputregex

服务器端校验的重要性,我就不在这里浪费口舌了。

从理论上讲,execute()方法完全可以完成任何的校验任务。但大多数情况下,并不这样做,而是使execute()方法专司其职。因在程序设计时,尽量使每个方法完成单一的任务。

1、  Struts2手动完成输入校验

     a、重写validate()方法

     通过继承ActionSupport类,重写validate()方法(专门用来校验的)完成输入校验.struts2框架会在调用Action类的execute()和其它方法之前调用该类的validate()方法

       Eg:在一个Action类中有

private validate(){

       if(name == null){

              addFieldError(“name”,”用户名不能为空”);//错误信息默认显示在对应文本框上方,可以在jsp文件中定义<s:fielderror>标签接受,若有addFieldError方法,不再执行execute(),返回input逻辑视图

       }

}

       b、重写validateXxx()方法

validateXxx()方法在相应的Xxx()方法前运行,注意若某个Action中同时有validate()和validateXxx()方法时,处理Xxx()逻辑前先运行validate()方法,没fielderror时再执行validateXxx()检错

 

2、错误信息在指定位置显示

       错误信息会在struts标签相应文本域上显示,但struts标签排版不是很美观,若不用他怎么显示错误信息呢?eg:用一下方法输出

<form action="mixValid.action" method=post>    

  ${errors.username[0]}    

 用户名: <input name="username" value="beansoft" >    

   ...    

</form>

其中${errors.username[0]}可以显示username的值的错误校验信息。

校验错误信息是以 Map 的方式存放在ValueStack中的。

Map中的   

       key: errors

    value: {username=[用户不能为空],属性名=[校验错误信息]...}

所以可以使用上面的方法显示错误校验信息,避免使用Struts标签。

如果是<input name="user.name"/>这样的标签,显示错误信息的方式不是${errors.user.name[0]}

而是${errors["user.name"][0]}

 

3、  struts2内置校验器

Struts2已经为我们准备了一些内建校验器,我们可以直接使用它们, 在default.xml文件中,我们可以看到Struts2的内建校验器。

要使用struts2内置校验器就得配置校验文件,配置文件名称为<ActionName>-validation.xml

Eg:字段校验器配置

<?xml ···?>

<!DOC  ··· ”.dtd”>

<validators> <!-- 校验器根元素 -->

    <field name="name"> <!-- 指定属性name(被校验的字段) -->

        <field-validator type="requiredstring"> <!-- 定义校验类型为必填字符串-->

            <message>姓名不能为空</message> <!--校验失败输出信息,默认在对应文本框上输出-->

        </field-validator>

    </field>  <!-- 基本元素-->

</validators>

Eg:非字段校验器配置

<?xml ···?>

<!DOC  ··· ”.dtd”>

<validators> <!-- 校验器根元素 -->

<validator type = “校验器类型名”><!--基本元素-->

              <param name = “fieldName”>需要被校验的字段</ param >

       <param name = “参数名”>参数值</ param ><!--区别-->

       <message key = “I18Nkey”>校验失败提示信息</message><!--key用来指定国际化信息对应的key-->

 

</validator>

</validators>

 

3、常用的内置校验器有:

1,required 必填校验器,要求字段必须有值

2,stringlength字符串长度校验器

3,int 整数校验器,

4,date 日期校验器

5,expression 表达式校验器,它是一个非字段校验器,当参数expression计算的值为true时,校验通过,否则返回提示。

6,fieldexpression 字段表达式校验器,当参数expression计算的值为true时,校验通过,否则返回提示。它和5一样多用于在用户的两次输入中间进行判断,如下例:

 

<!-- 要校验的属性为rpass -->

    <field name="rpass">

    <!-- 使用fieldexpression校验器 -->

        <field-validator type="fieldexpression">

        <param name="expression"><![CDATA[(rpass == password)]]></param>

            <message>两次密码不相同!</message>

        </field-validator>

    </field>

7,email 邮件地址校验器,要求被检查的字段如果非空,则必须是合法的邮件地址。

8,url 网址校验器,要求被检查的字段如果非空,则必须是合法的URL地址。7和8都是基于正则表达式来计算的,可能会随着技术的进步而不同,用户可以自己扩展。

9,conversion转换校验器,检测某个字段是否发生过转换错误

10,regex正则表达式校验器

       他有3个参数,fieldname要检验的字段expression正则表达式、caseSensitive布尔值(大小写敏感与否)

 

4、自定义校验器

 

开发自己的校验器。方法如下:添加一个validators.xml文件,validators.xml文件中的配置则同刚才说的Struts2的内建校验器的配置相同。再开发出自己的校验器类,在validators.xml中注册就可以了。如果添加了validators.xml文件,则Struts2不会再应用默认的校验器,因此这时需要将default.xml文件中的所有校验器都复制到validators.xml文件中
0 0
原创粉丝点击