Struts:validator验证框架详解(二)

二、我们再来详细讨论一下各个文件中的细节问题

 

struts-config.xml文件的<action>标签里面有一个attribute属性,它的值对应了自己的验证文件validation.xml<formset><form name=...>的值,如果没有设置attribute,则validation.xml文件中<form name的值应该为struts-config.xml文件中对应的<form-bean>name属性值。

validation.xml文件是我们自己编写的验证文件,用<form>定义了我们需要验证的表单,用<field>定义了某单元素要使用的验证方法,而在<field>中,我们使用子节点<msg>来定义需要发送给页面的错误信息。格式为:

<msg name=”required” key=”myRequired” />

在这里name指定了该条消息是针对哪一个验证规则的,它对应了<field depends=的值。key指定了消息的内容,这要从我们的资源文件ApplicationResources.properties中查找相应信息,如果找不到则为空。把上面的消息节点加入<field>节点内,然后在资源文件中加入:

myRequired = myMsg: {0} is required;

这样,验证错误时就会在页面显示自己希望的错误信息,如下图:

如果在我们没有用<msg>指定消息,那么程序会使用默认的消息,我们在验证规则文件中可以查看到消息关键字,例如:

<validator name="required"

             ……

             msg="errors.required">

这里,msg指定了required验证所使用的默认消息的关键字,相当于<msg>标签中的key=”errors.required”,所以只要我们在资源文件中加入:errors.required=......这样格式的语句,就可以显示默认的消息了。

资源文件中的{0}是占位符,可以用我们希望的内容来替换掉它使得内容灵活,可以使用多个占位符:{1}{2}{3}。要替换掉占位符时需要添加<arg0 /><arg1 />等标签。

在上面的消息中我们使用了一个占位符{0},所给<field>节点加入子节点:

<arg0 name=”required” key=”myArg” resource=”true”/>

name指定了要替换占位符的消息,key指定了替换内容,resource默认为true,表示key对应的内容需要从资源文件中查找,如果没有找到返回空。如果设置resource=”false”,则表示key对应的内容需要从validation.xml文件中查找。将上一句<arg0 ……/>加入到<field>节点中,然后在资源文件中加入语句:

myArg = myArgument;

运行login.jsp,得到如下界面:

可以看到消息内容中原本{0}的地方被myArgument所替代了。

<arg0 …/>中设置resource=”false”时,我们需要在validation.xml文件中查找key对应的内容。

如果key的值是普通字符串,则直接用这个字符串代替占位符。我们把先前的validation.xml文件中<arg0>标签的resource设置为false,其他无改动,则页面变化为:

如果把之前的key的格式修改为key=”${var:myArg}”,则表示我们要在自己定义的变量中查找myArg对应的值。

我们给<field>节点中加入子节点<var>,具体如下:

<var>

        <var-name>myArg</var-name>

        <var-value>user's name</var-value>

</var>

这样以来就会用user’s name来替换掉占位符:

如果没有在当前<field>下找到var-name符合的<var>节点,则用key的值,也就是${var:myArg}替换占位符,如下:

我们不仅可以在每一个<field>内设置子节点<var>来供<arg0 />等来引用,还可以设置全局量供所有表单引用。

validation.xml文件的根结点<form-validation>下加入:

<global>

  <constant>

    <constant-name>conName</constant-name>

    <constant-value>conValue</constant-value>

  </constant>

</global>

并且修改<arg0 />key的值为key=”${conName}”,则程序会用conValue来代替占位符:

如果找不到key的值中conName对应的<constant>节点,则会直接使用key的值替换占位符:

除此之外,${var:myArg}${conName}也可以出现在<var>节点中<var-value>的内容中。

 

三、我们在来讨论一下如何使用更复杂的验证。

 

当需要在表单的某个字段上使用多个验证规则的时候,我们就需要将这些规则全部加入到<field>标签的depends=””之中,并且用逗号分隔,例如:

我们修改前面的validation.xml文件后内容如下:(这里只是有变化的部分的代码)

<field property="name" depends="required,minlength">

      <msg name="required" key="myRequired" />

      <msg name="minlength" key="myMinlength" />

      <arg0 key="${var:myArg}" resource="false"/>

      <arg1 name="minlength" key="${var:minlength}" resource="false"/>     

      <var>

        <var-name>myArg</var-name>

        <var-value>user's name</var-value>

      </var>

      <var>

        <var-name>minlength</var-name>

        <var-value>3</var-value>

      </var>

    </field>

    <field property="password" depends="required">

</field>

分析上面的代码,我们对表单的name字段使用了两种验证规则,一个是required(不可为空),一个是minlength(最小串长度),并且对每种验证使用了不同的错误消息:myRequiredmyMinlength,我们通过<msg>name标签属性来分配的。接着我们对消息中的占位符进行配置,<arg0 />中没有设置name标签属性,所以它的配置是对两个验证规则的错误消息都有效的。而<arg1/>中设置了name=”minlength”属性,这个参数配置只对minlength验证的错误消息有效。这里要注意的一个地方是我们在设置串的最小长度限制参数<arg1/>的时候,使用了key=”${var:minlength}” resource=”false”,这个形式十分重要,是固定不能改动的。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值