零基础学Struts
上QQ阅读APP看书,第一时间看更新

5.2 校验器风格

Struts 2提供了两种方式来配置校验器:字段校验器风格和非字段端校验器风格。这两种配置风格并没有本质上的区别,只是组织校验规则文件的方式不同。

5.2.1 字段校验器风格

validators元素下可以出现两个元素:field和validator,使用这两个元素有什么不同呢?如果使用field元素就是字段优先,表示使用字段校验器配置风格;如果使用validator元素就是校验器优先,就是非字段校验器配置风格。

通过上面的DTD规范,设计校验规则文件示意图如图5.1所示。

图5.1 校验规则文件示意图

将示意图转换成代码格式如下。

        <validators>
              <field name="被校验的字段">
                    <field-validator type="使用校验器名称">
                            <! -- 校验参数 -->
                              <param name="参数名">参数值</param>
                              <param name="参数名">参数值</param>
                              <! -- 校验失败提示错误信息 -->
                              <message key="国际化资源key">错误提示信息</message>
                      </field-validator>
                </field>
                      <field name="被校验的字段">
                      <field-validator type="使用校验器名称">
                              <! -- 校验参数 -->
                              <param name="参数名">参数值</param>
                              <param name="参数名">参数值</param>
                              <! -- 校验失败提示错误信息 -->
                              <message key="国际化资源key">错误提示信息</message>
                      </field-validator>
                </field>
          </validators>

一个field元素指定一个Action中的属性所必须的校验规则。其中name属性用来指定被校验的属性字段。field-validator元素用来指定一个校验规则,如果该属性有多个规则可以定义多个field-validator元素。

field-validator元素中的type属性用来指定校验器名称field-validator元素中包含多个param子元素和一个必须的message元素。其中param元素用来指定该校验器所需的参数。message元素用来指定校验失败后的提出错误信息。

param元素中的name属性用来指定参数名。message元素中的key属性用来指定国际化资源文件中的key,用来提示错误信息。

5.2.2 非字段校验器风格

非字段校验器配置风格,从名称上来看知道它肯定不是以字段优先。那么它以什么优先呢?从前面的分类介绍来看,非字段校验器配置风格是使用校验器优先。

图5.2 校验规则文件示意图

通过上面的DTD规范可知,设计校验规则文件示意图如图5.2所示。

将示意图转换成代码格式如下所示。

        <validators>
              <validator type="使用校验器名称">
                    <param name="fieldName">被校验字段</param>
                    <! -- 其他校验参数 -->
                    <param name=""></param>
                      <! -- 校验失败提示错误信息 -->
                      <message key="国际化资源key">错误提示信息</message>
                </validator>
                <validator type="使用校验器名称">
                      <param name="fieldName">被校验字段</param>
                      <! -- 其他校验参数 -->
                      <param name=""></param>
                      <! -- 校验失败提示错误信息 -->
                      <message key="国际化资源key">错误提示信息</message>
                </validator>
          </validators>

一个validator元素指定一个校验规则,其中type属性用来指定校验器名称。在param元素中必须配置一个fieldName参数,并指定参数值为Action中被校验属性名。其他元素的配置与字段校验器相同。

5.2.3 配置风格比较

前面介绍了两种校验器配置风格,到底哪种配置风格比较好呢?有些开发人员觉得字段校验器配置风格可能会比较好点。因为是以字段优先的,这样可以一个字段一个字段地着手来编写校验规则,而且在一个字段中可以添加多个校验规则。如果使用非字段校验规则,首先必须配置使用哪个校验器,然后再配置被校验字段,这样比较难理解。

这个关系到个人偏向问题。有些开发人员可能喜欢先定义好被校验字段,然后为该字段添加校验规则。也有些开发人员可能喜欢先定义好规则,然后再在规则中指定被校验字段。可以根据个人的喜好选择其中的一种,但是建议不要混用这两种配置风格。

如果混用的话,会不会出现错误呢?其实错误倒是不会产生,但是这样校验规则文件代码就会显得非常凌乱了。使用其中一种配置风格能够使得代码更加整洁,容易看懂。