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

来源:互联网 发布:精选淘宝怎么卸载 编辑:程序博客网 时间:2024/05/18 02:48

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

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来做这个过滤工作,我们只需要做具体的逻辑判断即可(如实现免登陆的功能)

原创粉丝点击