ZK Validator

一、Input Validator

<textbox value="@save(vm.account.email, before='save') @validator(vm.emailValidator)"/>
      当绑定组件的属性到一个validator,在保存数据到绑定的目标之前绑定器将会自动调用它去验证属性值。如果验证失败,ViewModel(or middle object)的属性将保持不变。

(1)@bind(vm.account.email)@validator(vm.emailValidator)

保存时机:触发组件属性相关事件,如onChange for value。

验证时机:立即验证单一域;当执行一个command时不会验证。

验证失败:不会保存数据。

(2)@load(vm.account.email) @save(vm.account.email,before= 'save') @validator(vm.emailValidator)

保存时机:执行command之前。

验证时机:触发指定的command时,验证所有域;当用户在单一域输入后不会验证。

验证失败:不会保存数据,并且不会执行command。

二、双重验证

<groupbox form="@id('fx') @load(vm.selected) @save(vm.selected, before='saveOrder') @validator(vm.formValidator)">
    <grid hflex="true" >
        <columns>
            <column width="120px"/>  <column/>
        </columns>
        <rows> 
            <row>Quantity
                <intbox value="@bind(fx.quantity) @validator(vm.quantityValidator)"/>
            </row>  
        </rows>
    </grid>
</groupbox>
第一次验证:在用户输入后立即验证。

第二次验证:当执行command前验证,可以验证输入为空的情况。

三、Validation Message Holder

      在执行完validation之后,validator会将验证信息存储在validation message holder里面。如果要使用,必须在validationMessages属性上,通过@id(‘vmsgs’)指定它的id来初始化,之后就可以引用这个id,展示验证信息。

(1)组件自身作为key

<textbox id="tb1" value="@bind(vm.value1) @validator(vm.validator1)" />
    	<label id="m1" value="@bind(vmsgs[tb1])"/>

<!--可以通过tb1组件本身,而不是’tb1’id作为key-->

(2)自定义key

<textbox id="t41" value="@bind(fx.value1)"/>
<label id="l41" value="@bind(vmsgs['fkey1'])"/>

(3)显示多条验证信息(只能在ZK EE 6.0.1版本以上使用)

      可以从Validation Message Holder的特殊属性texts中取得所有信息。

      vmsgs.texts和vmsgs[‘texts’]是一样的,所以要避免使用texts作为自定义的key.

<div id="formdiv" form="... @validator('fooValidator')">
...
</div>
<grid id="msggrid" model="@bind(vmsgs.texts[formdiv])" visible="@bind(not empty vmsgs.texts[formdiv])">
    	<template name="model" var="msg">
        	<row>
            	<label value="@bind(msg)" />
        	</row>
    	</template>
</grid>
四、实现validator

      可以通过实现Validator接口或者继承AbstractValidator类实现

(1)单一属性验证

      一次验证一个属性。最简单的方法就是继承AbstractValidator并重写validate方法。addInvalidMessage没有指定key,所以把validator绑定的组件对象作为key


(2)依赖属性验证

       验证当前属性需要另一个属性值。需要使用@save(vm.p, before=’command’)方式


在shippingDateValidator验证类中,shipping date是验证的主要属性,验证它需要依赖另一个属性creation date。

主要属性获取方式:ctx.getProperty().getValue()

依赖属性获取方式:ctx.getProperties("依赖的属性")[0].getValue()


(3)form上的依赖属性验证

      要在form属性上应用validator,而不是在input组件上。


       当使用Form绑定,主要的属性是一个Form,所以需要指定key来获取Form下的所有属性。

       获取方式:(自从6.0.1后可以通过ValidationContext.getProperties(Object))


      另一种,取得bean的所有属性:


五、使用参数验证

六、应用级别的验证器(只有一个实例,在所有绑定器间共享)

使用方式:

七、内置的验证器

      通过@validator(‘validatorName’)直接使用

(1)beanValidator

这个验证器集成JavaBean验证框架,定义了一个元数据模型和API来验证javabean

开发人员可以通过Java注释和验证bean API指定bean属性的约束

通过使用ZK的bean验证器,您只需要指定bean的属性限制然后bean验证器将调用API来验证

JSR-303 是JAVA EE 6 中的一项子规范,叫做Bean Validation,官方参考实现是Hibernate Validator

在pom.xml使用:


在project classpath下:


使用:在JavaBean的属性上通过Java注解添加约束


页面:通过validator的name--beanValidator来调用


(2)formBeanValidator

      像Bean验证器,这个验证器也将结合JavaBean验证并验证Bean的所有保存属性

使用:

      通过验证器的name并通过prefix属性,设置一个独特的前缀。

      当验证失败,会使用prefix+propertyName作为key。










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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值