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
    评论
ava实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),可运行高分资源 Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现
C语言是一种广泛使用的编程语言,它具有高效、灵活、可移植性强等特点,被广泛应用于操作系统、嵌入式系统、数据库、编译器等领域的开发。C语言的基本语法包括变量、数据类型、运算符、控制结构(如if语句、循环语句等)、函数、指针等。下面详细介绍C语言的基本概念和语法。 1. 变量和数据类型 在C语言中,变量用于存储数据,数据类型用于定义变量的类型和范围。C语言支持多种数据类型,包括基本数据类型(如int、float、char等)和复合数据类型(如结构体、联合等)。 2. 运算符 C语言中常用的运算符包括算术运算符(如+、、、/等)、关系运算符(如==、!=、、=、<、<=等)、逻辑运算符(如&&、||、!等)。此外,还有位运算符(如&、|、^等)和指针运算符(如、等)。 3. 控制结构 C语言中常用的控制结构包括if语句、循环语句(如for、while等)和switch语句。通过这些控制结构,可以实现程序的分支、循环和多路选择等功能。 4. 函数 函数是C语言中用于封装代码的单元,可以实现代码的复用和模块化。C语言中定义函数使用关键字“void”或返回值类型(如int、float等),并通过“{”和“}”括起来的代码块来实现函数的功能。 5. 指针 指针是C语言中用于存储变量地址的变量。通过指针,可以实现对内存的间接访问和修改。C语言中定义指针使用星号()符号,指向数组、字符串和结构体等数据结构时,还需要注意数组名和字符串常量的特殊性质。 6. 数组和字符串 数组是C语言中用于存储同类型数据的结构,可以通过索引访问和修改数组中的元素。字符串是C语言中用于存储文本数据的特殊类型,通常以字符串常量的形式出现,用双引号("...")括起来,末尾自动添加'\0'字符。 7. 结构体和联合 结构体和联合是C语言中用于存储不同类型数据的复合数据类型。结构体由多个成员组成,每个成员可以是不同的数据类型;联合由多个变量组成,它们共用同一块内存空间。通过结构体和联合,可以实现数据的封装和抽象。 8. 文件操作 C语言中通过文件操作函数(如fopen、fclose、fread、fwrite等)实现对文件的读写操作。文件操作函数通常返回文件指针,用于表示打开的文件。通过文件指针,可以进行文件的定位、读写等操作。 总之,C语言是一种功能强大、灵活高效的编程语言,广泛应用于各种领域。掌握C语言的基本语法和数据结构,可以为编程学习和实践打下坚实的基础。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值