框架学习之struts2-04数据类型转化和数据校验

数据类型转化和数据校验的原理和流程

struts2数据校验的基本原理

  1. 当用户发送请求经过一系列的过滤器之后,会由动态代理生成相应的拦截器
  2. 由拦截器进行数据的校验,如果数据不合法将产生错误信息,并且返回一个逻辑结果INPUT
  3. 我们可以将错误信息自定义,然后通过struts2标签输出到页面
  4. 我们也可以自定义数据校验器和转换器

操作流程

  1. 自定义校验器
    1.创建一个自定义校验器类继承FieldValidatorSupport类
    2.重写validate()方法,方法体内部进行数据校验,如果不符合条件在action中放入错误字段名,会自动产生错误信息,在页面上就可以输出此字段的错误信息,同样也可以自定义错误信息
    3.在src根目录下创建一个validators.xml文件,里面的validator的class属性指向这个校验器
  2. 自定义转换器
    1.创建一个自定义转换器继承StrutsTypeConverter类
    2.重写convertFromString()和convertFromString()方法,在前者的方法体中做数据转换,直接返回一个我们想要转换的类型即可
    3.可以在src下创建一个xwork-conversion.properties文件作为全局的转换器配置,用需要目标转换类(包名.类名)指向该转换器;或者在同一个包级别中配置一个文件,名字叫XxxAction-conversion.properties,里面用目标action名指向这个转换器
  3. 自定义校验xml文件
    在同一个包级别下创建一个XxxAction-目标action名-validation.xml文件,在该文件中配置需要校验的字段名的配置(举例说明,member为操作对象)
<validators>

    <field name="member.loginId">
        <field-validator type="requiredstring">
            <message>会员账号不能为空!</message>
        </field-validator>
        <field-validator type="stringlength">
            <param name="minLength">6</param>
            <param name="maxLength">20</param>
            <message>账号的字符数必须在${minLength}到${maxLength}位之间</message>
        </field-validator>
        <field-validator type="regex">
            <param name="regex"><![CDATA[\w*]]></param>
            <message>账号中的字符只能出现“字母”、“数字”或“下划线”!</message>
        </field-validator>
    </field>

    <field name="member.loginPsw">
        <field-validator type="requiredstring">
            <message>会员密码不能为空!</message>
        </field-validator>
        <field-validator type="stringlength">
            <param name="minLength">8</param>
            <param name="maxLength">20</param>
            <message>账号的字符数必须在${minLength}到${maxLength}位之间</message>
        </field-validator>
    </field>

    <field name="loginPsw2">
        <field-validator type="requiredstring">
            <message>确认密码不能为空!</message>
        </field-validator>
        <field-validator type="fieldexpression">
            <param name="expression"><![CDATA[member.loginPsw == loginPsw2]]></param>
            <message>确认密码错误:两次密码不一致!</message>
        </field-validator>
    </field>

    <field name="member.height">
        <field-validator type="required">
            <message>会员身高不能为空!</message>
        </field-validator>
        <field-validator type="double">
            <param name="minInclusive">1.0</param>
            <param name="maxInclusive">2.5</param>
            <message>会员身高必须在${minInclusive}到${maxInclusive}米之间</message>
        </field-validator>
    </field>

    <field name="member.birthdate">
        <field-validator type="date">
            <param name="min">1980-1-1</param>
            <param name="max">2000-12-31</param>
            <message>会员出生日期必须在${min}到${max}之间</message>
        </field-validator>
    </field>

    <field name="member.zipcode">
        <field-validator type="zip">
            <message>会员的邮编号码格式错误,必须是6位数字</message>
        </field-validator>
    </field>

 </validators>

自定义拦截器
1. 创建一个自定义拦截器类实现接口interceptor或继承抽象类AbstractInterceptor
2. 重写intercept(ActionInvocation actionInvocation)方法
3. 利用传递的参数actionInvocation获得servletAPI进行处理扽登陆访问权限验证等需求
4. 在xml文件中进行配置,声明自定义的拦截器,然后需要注册启用
5. 可以将其设置成默认的拦截器,这样就是默认在该包命名空间下的访问都会经过这个拦截器
6. 在配置默认的拦截器时注意:
a. 要改变之前使用的默认的拦截器栈,重新定义一个拦截器栈,将自定义的和struts2原始默认的拦截器一起配进去
b. 设置好后仍然需要注册启用
c. 在要使用struts2原始的默认拦截器设置参数时就用自定义拦截器栈名 . dafualtStack声明
7. 在配置自定义拦截器的时候,可以配置不过滤的目标方法,交给struts2来做这个过滤工作,我们只需要做具体的逻辑判断即可(如实现免登陆的功能)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值