输出类型转换错误和输入校验

输出类型转换错误

 

  默认的defaultStack中已经包含了conversionError的拦截器自动跳转到input逻辑视图。

 

  默认的错误提示是:Invalidfield value for field {0}.

 

(3)如果需要使用自定义的错误提示信息:

   A.全局方式:增加一个全局的国际化资源文件。

        该文件中增加一个key为xwork.default.invalid.fieldvalue的国际化消息。

   B.局部方式:专门为指定Action的、指定属性指定转换失败的错误提示。

        国此这种方式的错误提示可以更有针对性、更具体。

 

        为指定Action增加一个Action范围的国际化资源文件。

        该文件中增加一个key为   invalid.fieldvalue.属性名    的国际化消息。

 

         局部方式可以履盖全局的方式

 

===================输入校验==================================      

   

    类型转换和输入校验是“牢牢”结合的。

 

   String类型请求参数

           

     类型转换  (可能失败)

 


      输入校验  (可能与我们业务要求不符合)

只有通过  <1>.类型转换  <2>.输入校验后的数据,才能去调用的Action

 

Struts 2的输入校验十分简单

   客户端校验:防止用户的误输入,从而降低服务器的负担。

   服务器校验:它是整个应用最后的安全防线。

 

Struts 2的输入校验,完全是模块化方式进行的。

   需要校验,完全是模块化方式进行的。

    1. 让Action继承ActionSupport基类。

    2. 为该Action增加校验规则文件。-----Struts 2会自动加载校验规则文件。

    3. 校验规则文件的名应该是Action类名--validation.xml

        每个校验器就对应于一条校验规则!与要校验的Action放在同一个包下面。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC
        "-//Apache Struts//XWork Validator 1.0.2//EN"
        "http://struts.apache.org/dtds/xwork-validator-1.0.2.dtd">

<validators>
	<!-- 此处指定我们要校验哪个字段 -->
    <field name="user.name">
        <field-validator type="requiredstring"><!-- 必填 -->
            <message>用户名必填</message>
        </field-validator>
        
         <field-validator type="stringlength">
             <param name="minLength">4</param>
             <param name="maxLength">8</param>
             <param name="trim">true</param>
             <message>用户名长度必须在${minLength}和${maxLength}之间</message>
        </field-validator>
    </field>
    
    <field name="user.password">
    
        <field-validator type="requiredstring"><!-- 必填 -->
            <message>密码必填</message>
        </field-validator>
        
        <!-- <field-validator type="stringlength">
             <param name="minLength">4</param>
             <param name="maxLength">8</param>
             <param name="trim">true</param>
             <message>密码长度必须在${minLength}和${maxLength}之间</message>
        </field-validator> -->
        
        <field-validator type="regex">
        <!--要求密码必须匹配\w{4,8}正则表达式  -->
            <param name="expression"><![CDATA[\w{4,8}]]></param>
            <message>密码长度必须在4位到8位之间</message>
        </field-validator>
        
    </field>
    
    
    <field name="rpass">
    
        <field-validator type="requiredstring"><!-- 必填 -->
            <message>必须再输入一次密码</message>
		</field-validator>
		
		
		<field-validator type="fieldexpression">
			<param name="expression"><![CDATA[rpass==user.password]]></param>
			<message>两次输入的密码不一致</message>
		</field-validator>
		
		
		
		
	</field>
    
    <field name="user.weight">
        <field-validator type="required"><!-- 必填 -->
            <message>体重必填</message>
        </field-validator>
       
        <field-validator type="double">
            <param name="minExclusive">45.0</param>
            <param name="maxExclusive">99.98</param>
            <message>体重必须在 ${minExclusive} 到 ${maxExclusive}之间</message>
        </field-validator>
   
    </field>
    
    <field name="user.birth">
        <field-validator type="required"><!-- 必填 -->
           <message>生日必填</message>
        </field-validator>
        
         <field-validator type="date">
           <param name="min">2000-01-01</param>
            <param name="max">2015-01-01</param>
            <message>输入的日期必须在${min}和 ${max}之间</message>
           </field-validator>
    </field>
    
</validators>

校验失败时,会跳转到input的Result,因此需要配置一个名为Input的result元素。

 

 

 

 

Struts 2内置了大量的输入校验器:

1.    conversion validator

2.    date validator

3.    double validator

4.    email validator

5.    expression validator

6.    fieldexpression validator

7.    int validator

8.    regex validator

9.    required validator

10.  requiredstring validator

11.  short validator

12.  stringlength validator

13.  url validator

14.  visitor validator

15.  conditionalvisitor validator

  requiredstring  --- 必填字符串

  date   --- 判断必须在指定的日期范围内。

  double  --- 判断必须在指定的double范围内。

  int   ---  判断必须在指定的int范围内。

  expression  --  表达式校验器。要求必须满足某个表达式。

  regex  --- 表达式校验器。要求必须满足某个正则表达式。

            email  url都可通过正则表达式来实现。

  stringlength  --- 字符串长度必须在指定范围内。

 

 

错误提示信息的国际化:

   错误提示信息,有两种方式指定:

         A.<message>提示信息</message>  ----  错误提示信息不会国际化

   B.<message   key="消息key"/>  ---错误提示信息会国际化

 

客户端校验:

 (1)  表单应该用Struts 2的s:form标签定义表单。

 (2)  为s:form标签增加validate="true"即可。

 

    客户端与服务器的校验的区别是:url不改变。

 

使用客户端校验时,有一点需要注意:

        如果依然使用Action范围的国际化资源来生成错误提示,表单页面将无法加载

 国际化资源文件。

    所以想让客户端验证加载国际化资源,我们就要使用全局范围内的资源文件。

     全局范围的国际化资源,系统不会自动加载。

 

     有些样验器规则,客户端校验是不支持的。

     典型的,如fieldexpression,客户端校验是不支持的。

 

 校验器有两中配置风格:

   (1)字段优先的配置风格。FieldValidator Syntax

 

   (2)校验器优先的风格。   PlainValidator Syntax

     

     校验器优先的配置风格,它是一个校验器为核心。

     通过为校验器指定fieldName参数,来确定该校验器要校验哪个字段。

 

  校验规则文件 的搜索顺序:

   假如

     BaseAction     (BaseAction-validation.xml)

         

    UserAction     (UserAction-validation.xml)

 

    RegistAction    (RegistAction-validation.xml)

     那么RegistAction的校验规则文件,为BaseAction-validation.xml

                                        +UserAction-validation.xml

                                        +RegistAction-validation.xml

                                    一共是3份校验规则文件的校验规则总和。

      如果后面的文件与后面的文件发生了冲突,后面的胜出。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值