zk之validation

来源:互联网 发布:c语言入门书籍推荐知乎 编辑:程序博客网 时间:2024/06/05 02:41

    下面介绍一下如何使用zk的validator:

     步骤一:

       新建一java类 ,这个类需要继承org.zkoss.bind.validator.AbstractValidator类,然后在validate实现你的校验。代码如下:

package com.wit.li.controller;

import org.zkoss.bind.ValidationContext;
import org.zkoss.bind.validator.AbstractValidator;

public class EmailValidator extends AbstractValidator {

@Override
public void validate(ValidationContext ctx) {
String email = (String) ctx.getProperty().getValue();
System.out.println(email);
addInvalidMessage(ctx, "我就是不给你过");
}


}


    步骤二

        新建一个ViewModel,在viewModel中使用该validator。

package com.wit.li.controller;


import java.util.ArrayList;
import java.util.List;


import org.zkoss.bind.Validator;
import org.zkoss.bind.annotation.Command;
import org.zkoss.bind.annotation.NotifyChange;
import org.zkoss.zul.ListModelList;
import org.zkoss.zul.Listbox;


public class ButtonViewModel  {


private Validator emailValidator = new EmailValidator();
public Validator getEmailValidator(){
return emailValidator;
}

private List<String> str;

private Listbox box;

public Listbox getBox() {
return box;
}

public void setBox(Listbox box) {
this.box = box;
}

public List<String> getStr() {
return str;
}

public void setStr(List<String> str) {
this.str = str;
}

@Command
@NotifyChange("str")
public void btn1(){
System.out.println("hi 1");
str = new ArrayList<String>();
str.add("100");
str.add("101");
str.add("102");
}

@Command
public void btn2(){
str = new ArrayList<String>();
str.add("200");
str.add("201");
str.add("202");
}

}

         emailValidator 就是我定义的校验器,get方法是必须的,因为在view层获取校验器的时候是通过get方法获取的。

    步骤三

        编写zul文件,代码如下:

<zk>
<window id="win"
apply="org.zkoss.bind.BindComposer" validationMessages="@id('vmsgs')"
viewModel="@id('vm')@init('com.wit.li.controller.ButtonViewModel')">
<textbox id="tb1" value="@bind(vm.str) @validator(vm.emailValidator)" />
<label id="m1" value="@bind(vmsgs[tb1])"/>
<button label="bt1" onClick="@command('btn1')" />
<button label="bt2" onClick="@command('btn2')"/>
<listbox forEach="${vm.str }" id="listbox">
<listitem   label="${each }"></listitem>
</listbox>
</window>
</zk>

        需要说明的是 validationMessages="@id('vmsgs')",这个指定了访问校验信息的id。@bind(vmsgs[tb1])是获取tb1的校验信息。

0 0
原创粉丝点击