黑马程序员---struts2学习笔记之七(表单验证)

-----------android培训java培训、java学习型技术博客、期待与您交流!------------


struts2表单验证

1.struts2手动验证:

        action类要继承ActionSupport类(已实现Validateable接口)或者实现Validateable接口,重写Validateable接口的validate()方法;

        action类中要声明与前台页面一致的属性字段,并提供set/get方法,这样可以确保验证相关的方法的执行顺序为:set()→validate()→请求处理方法(目标方法);

       validate()方法中验证:根据需要编写代码验证即可以,需要注意的是,ActionSupport类中提供了一个方法addFieldError(String

key, Stringvalue),用于保存验证不通过后的错误信息,同时验证拦截器(AnnotationValidationInterceptor)底层也是通过判断这个方法返回的集合是为空来判断验证是否通过,如果通过则执行下一个环节,如果不通过直接返回“input”,前台则跳转到“input”结果对应的页面(很多拦截器处理不通过都会返回input”因此这个结果处理不配经常会发生页面中报一大片错误的现象:

Messages:

 

No result defined for action com.struts2.validate.ValidateAction and result input

);

2.验证指定的方法:

        按以上操作、配置后框架会对所有的方法进行验证,这并不符合开发的需要,因此我们需要指定需要验证的方法,要实现此效果,可在validate()方法的签名后面加上需要验证的业务方法名即可,需要注意业务方法名的首字每要大写。以上功能的实现原理还是要追溯到验证的拦截器中处理验证的源码。

2. struts2xml验证:

        前页的步骤与手动验证一样,证验方式不在代码中写,而是通过xml文件来配置,具体配置方式为:

        在与action类同级目录下新建一个xml文件,命名为:action类名-validation.xml文件中内容按xwork-validator-1.0.3.dtd的约束配置,需要配置的内容为:

***************************************************************

<validators>

    <!--field:指定要验证的字段 -->

    <field name="username">

<!--field-validator:指定要验器,type:验证器的名称(与拦截器一样,底层已写好)-->

       <field-validator type="requiredstring">

           <!--param:向验证器传入参数 -->

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

           <!--message:验证失败后需要提示的信息 -->

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

       </field-validator>

    </field>

</validators>

***************************************************************

如果验证需要用到多个验证器,则可以在<field>下增加多个<field-validator>标签,配置方式与上面的模式一样;

       按以上配置,同样会存在对所有的业务方法执行前进行验证操作的问题,为解决这个问题,只需要在验证xml的文件命名做下调整即可,命名要求为:action类名-actionName-validation.xml.

3.xml验证器:

       Struts2xml验证是基于底层写好的的验证规则的,含有这些验证规则,用于处理xml验证的java类,就是验证器,我们可以从com.opensymphony.xwork2.validator.validators中的default.xml文件中找到底层注册的验证器(与拦截器很相似),如下:

***************************************************************

<validators>

    <validator name="required" class="com.opensymphony.xwork2.validator.validators.RequiredFieldValidator"/>

    <validator name="requiredstring" class="com.opensymphony.xwork2.validator.validators.RequiredStringValidator"/>

    <validator name="int" class="com.opensymphony.xwork2.validator.validators.IntRangeFieldValidator"/>

    <validator name="long" class="com.opensymphony.xwork2.validator.validators.LongRangeFieldValidator"/>

    <validator name="short" class="com.opensymphony.xwork2.validator.validators.ShortRangeFieldValidator"/>

    <validator name="double" class="com.opensymphony.xwork2.validator.validators.DoubleRangeFieldValidator"/>

    <validator name="date" class="com.opensymphony.xwork2.validator.validators.DateRangeFieldValidator"/>

    <validator name="expression" class="com.opensymphony.xwork2.validator.validators.ExpressionValidator"/>

    <validator name="fieldexpression" class="com.opensymphony.xwork2.validator.validators.FieldExpressionValidator"/>

    <validator name="email" class="com.opensymphony.xwork2.validator.validators.EmailValidator"/>

    <validator name="url" class="com.opensymphony.xwork2.validator.validators.URLValidator"/>

    <validator name="visitor" class="com.opensymphony.xwork2.validator.validators.VisitorFieldValidator"/>

    <validator name="conversion" class="com.opensymphony.xwork2.validator.validators.ConversionErrorFieldValidator"/>

    <validator name="stringlength" class="com.opensymphony.xwork2.validator.validators.StringLengthFieldValidator"/>

    <validator name="regex" class="com.opensymphony.xwork2.validator.validators.RegexFieldValidator"/>

    <validator name="conditionalvisitor" class="com.opensymphony.xwork2.validator.validators.ConditionalVisitorFieldValidator"/>

</validators>

***************************************************************


------------------------------------------------------------2015年8月6日笔记--------------------------------------------------------------------------------


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值