`

张孝祥专栏

阅读更多
http://blog.csdn.net/zhangxiaoxiang/archive/2006/12/04/1429968.aspx

11月28日Validator框架培训日记收藏
validation.xml文件中的<form>代表一组校验规则,我们可以使用它的name属性值来选择这组规则去对某个JavaBean进行校验,也就是给JavaBean安上一组怎样的校验规则。
<Valdiator>元素的msg属性相当于该Validator的一个标记,如果该validator校验失败,我们可以取出它的msg,至于msg代表什么信息,validator框架不管。我们自己拿着msg去我们的资源文件中查。

Validator,ValidatorResources,ValidatorAction,Field是Validator框架中的几个重要的API类。Validator是调用Validator框架的入口类,ValidatorResources对应validator的xml配置文件,ValidatorAction对应xml文件中的<validator>元素、Field对应<field>元素、Form类对应<form>元素。查看Validator的源代码,了解了Validator是怎样去调用校验方法的,是怎样将参数信息传递给这些校验方法的。validator.validate()方法的源代码,对于1.3.0版本,validate方法中的如下代码应该是一个Bug。
if (form != null) {
            this.setParameter(FORM_PARAM, this);
应改为:this.setParameter(FORM_PARAM, form);

调用validator.setParameter方法将一个个参数对象存入到一个Map中,关键字就是类的名称,Validator.BEAN_PARAM等常量也是一些类的完全限定名称,在ValidatorAction内部通过反射获得验证方法对应的Method对象,然后根据其参数的类型名作为关键字从Map中检索相应的值作为参数,所以,Map中存储的条目可以多于验证方法所接收的参数个数的。
valiator.validate-->form.validate-->field.validate-->ValidateAction.executeValidationMethod
这一串的方法调用过程向存储参数的Map对象中存入了Validator、Form、Field、ValidateAction等对象。在validator的源代码中,有使用validator的example。Validator框架调用校验方法时,根据参数的类型来选择参数对象,如果要给校验方法传递多个参数类型完全一样的参数,那该怎么做呢?个人的一个想法:可以把这些参数打包成一个组装对象后再传递。

要使用Validator的JavaScript校验功能,要在jsp页面中使用struts的<html:javascript formName="xxx">标签,其中的xxx是某个校验域的名称,并在需要验证的表单的onsubmit属性中调用"return validateXxx()"方法。validateXxx方法可以通过<html:javascript>的method属性来改变。在struts-rules.xml文件中看到:
   Note: Starting in Struts 1.2.0 the default javascript definitions have
         been consolidated to commons-validator. The default can be overridden
         by supplying a <javascript> element with a CDATA section, just as
         in struts 1.1.
以后有时间还应该看看<html:javascript>的源代码,看看JavaScript代码是如何生成的,以及看看生成的JavaScript代码的实现细节,这个已经安排张艳清去熟悉了,有机会让他给大家讲讲。在二进制发行包中,有各个javascript源代码,看谁能够读懂这些源代码。


struts的Validator插件中的有关代码:
public static Validator initValidator(
        String key,
        Object bean,
        ServletContext application,
        HttpServletRequest request,
        ActionMessages errors,
        int page) {

        ValidatorResources resources =
            Resources.getValidatorResources(application, request);

        Locale locale = RequestUtils.getUserLocale(request, null);

        Validator validator = new Validator(resources, key);
        validator.setUseContextClassLoader(true);

        validator.setPage(page);

        validator.setParameter(SERVLET_CONTEXT_PARAM, application);
        validator.setParameter(HTTP_SERVLET_REQUEST_PARAM, request);
        validator.setParameter(Validator.LOCALE_PARAM, locale);
        validator.setParameter(ACTION_MESSAGES_PARAM, errors);
        validator.setParameter(Validator.BEAN_PARAM, bean);

        return validator;
    }

Struts中的ValidatorForm与ValidatorActionForm的设计思想,可以作为面向对象的一个很好案例。为什么getValidationKey方法中只有一句代码,那还要把这句代码抽取到一个单独的函数中来实现,而不在主函数中直接编写这句代码?不是说有多行代码才要抽取到一个函数中吗?
如果要为ValidatorActionForm对应的表单生成前台的javascript校验代码,可以使用类似如下的代码:
<html:javascript formName="/logon" />,其中的formName与校验域的名字完全一样,生成的javascript方法则是按formBean的名称来的。

如何校验两个密码字段的内容是否相等:讲解了validateif的设计思路,与当前字段进行比较的另外一个字段名必须作为当前校验器的变量进行配置。通过在struts帮助文挡的Validator帮助页面中搜索validateWhen,迅速掌握了ValidateWhen的使用:this两边都有*,整个表达式必须套在()中。
两个典型的<field>元素的配置:
           <field property="password2"
                    depends="validwhen">
                <arg   key="prompt.password"/>
                <var>
                    <var-name>test</var-name>
                    <var-value>(*this* == password)</var-value>
                </var>
            </field>
            <field property="age"
                    depends="intRange">
                <arg   key="prompt.age"/>
                <arg   key="${var:min}" resource="false" position="1"/>
                <arg   key="${var:max}" name="intRange" position="2"
                   resource="false"/>
                <var>
                    <var-name>max</var-name>
                    <var-value>60</var-value>
                </var>
                <var>
                    <var-name>min</var-name>
                    <var-value>18</var-value>

                </var>
            </field>



实验中的一个小插曲:即使没有配置DispatchAction的parameter属性,如果表单校验出错,也不会出现该Action的问题,因为只有通过表单校验后,ActionServlet才去调用Action。

学员们的发现:struts 1.2.4中的mailreader例子的validator-rules.xml文件中的required validator的方法的参数列表中少了一个参数,validateRequired方法本来接受6个参数,但该文件中只声明了5个参数,所以,在使用到该validator时总是报告错误。

最后讲解了DynaActionForm和DynaValidatorForm,完全不写一行代码,也玩了个登录用例的view层处理,Action使用的是ForwardAction,这可以作为以后免费讲座的一个很吸引人的主题。

杂记:struts的mail-reader例子程序中的一段<validator>配置。
     <!--
       This simply allows struts to include the validateUtilities into a page, it should
       not be used as a validation rule.
     -->
     <validator name="includeJavaScriptUtilities"
            classname=""
               method=""
         methodParams=""
              depends=""
                  msg=""
           jsFunction="org.apache.commons.validator.javascript.validateUtilities"/>

分享到:
评论

相关推荐

    移动用户资费统计系统

    累病倒了我两次的面试题--移动用户资费统计系统 - 张孝祥专栏 - CSDN博客

    html css javascript网页开发-张孝祥

    《HTML CSS JavaScript网页开发-张孝祥》是一本深度探讨网页开发核心技术的电子书籍,由知名讲师张孝祥编著。这本书以清晰易懂的方式,系统地介绍了网页开发的三大基础语言:HTML、CSS和JavaScript,旨在帮助读者从...

    张孝祥Struts视频源代码

    "张孝祥Struts视频源代码"很可能是由知名IT讲师张孝祥制作的一系列关于Struts框架的教程,其中包含了相应的源代码,帮助学习者通过实际操作理解Struts的工作原理和应用。 在深入探讨Struts框架之前,我们首先需要...

    张孝祥java课程3

    【标题】"张孝祥java课程3"是一个专注于Java编程教育的系列课程,由知名讲师张孝祥主讲。这个课程可能涵盖了Java语言的核心概念、语法以及进阶主题,是针对那些已经完成了前两部分学习,希望进一步提升Java技能的...

    传智播客张孝祥老师的经典

    【标题】"传智播客张孝祥老师的经典"指的是由知名教育机构传智播客的讲师张孝祥教授的一系列Java编程教学资料,这些资料因其高质量和深度被广大编程学习者视为经典。这个标签强调了张孝祥老师在IT教育领域的权威性和...

    张孝祥Java就业培训教程电子书(超星版)

    《张孝祥Java就业培训教程电子书(超星版)》是一本专为希望进入Java开发领域的学习者设计的教程,由知名IT教育专家张孝祥编写。这本书以通俗易懂的语言,结合丰富的实例,全面讲解了Java编程的基础与进阶知识,旨在...

    张孝祥IT课堂视频系列

    【张孝祥IT课堂视频系列】是一套综合性的IT学习资源,主要涵盖了网络技术、正则表达式、Cookie管理等多个核心计算机科学领域的知识点。张孝祥作为讲师,以其丰富的教学经验,深入浅出地讲解了这些关键概念,帮助学习...

    张孝祥Java 高级目录

    详细的java高级视频目录,适合初学者打好基础,赞美张孝祥老师。

    java web 张孝祥 高级特性

    java web 高级特性 张孝祥 part1

    张孝祥JAVA学习笔记

    张孝祥课程学习笔记,包括JAVA基础,JAVA高级,JavaScript全部的笔记,适合初学者。

    传智播客 张孝祥Struts2PPT

    传智播客 2010年 张孝祥 Struts2PPT 80页

    张孝祥的java培训教材2

    张孝祥的java培训教材2

    张孝祥移动计费系统

    该系统是张孝祥老师精心做出来的移动计费系统,无论是对于初学者还是高手,我想都会很有帮助的,希望他能帮组你学习

    张孝祥的vc++讲课记录

    【张孝祥的vc++讲课记录】是一份珍贵的学习资料,由知名讲师张孝祥亲自讲解,涵盖了VC++编程的诸多重要知识点。这份文档详细记录了VC++的基础知识、编程技巧以及实际应用,对于想要深入理解和掌握VC++的开发者来说,...

    张孝祥XML基础 传智播客

    张孝祥的XML基础课程主要涵盖了以下几个核心知识点: 1. **XML技术概述**:XML起源于SGML,旨在为网络上的数据交换提供一个统一的标准。它的设计目标是传输和存储数据,而非展示数据。XML的语法简洁且严格,使得...

    百度网盘:张孝祥Java就业培训教程

    百度网盘:张孝祥Java就业培训教程 百度网盘:张孝祥Java就业培训教程 百度网盘:张孝祥Java就业培训教程 百度网盘:张孝祥Java就业培训教程 百度网盘:张孝祥Java就业培训教程 百度网盘:张孝祥Java就业培训教程 ...

    传智播客张孝祥Java基础加强全部ppt

    传智播客张孝祥Java基础加强全部ppt

    张孝祥Java 就业培训教程

    【张孝祥Java 就业培训教程】是针对想要进入IT行业,特别是Java开发领域的学习者设计的一套专业课程。这个教程由知名讲师张孝祥主讲,以其丰富的教学经验和深入浅出的讲解方式,帮助学员掌握Java编程的核心技能,为...

Global site tag (gtag.js) - Google Analytics