ZK MVVM中的表单验证(服务器端)示例

时间:2013-01-16 09:35:41

标签: java validation mvvm server-side zk

您能否解释一下如何使用MVVM方法在服务器端进行表单验证。我尝试过,但无法有效地做到这一点。我使用intbox等在客户端进行了小的验证。 但我想做一些验证,如:

  
      
  1. 属性的值不应超过100。
  2.   
  3. 如果用户填写了属性A的值,那么属性B将成为强制性的,就像那样。
  4.   
  5. 如果属性A的值为100且B为50,则属性C的值成为强制性且不能超过150
  6.   

我无法找到在MVVM中执行此操作的方法。我使用的是ZK CE 6.0.0版本。

我尝试了下面提到的代码:

Validation.zul

<zk>
    <window title="Validation" border="normal"
        apply="org.zkoss.bind.BindComposer" id="validtionWin"
        viewModel="@id('vm') @init('com.nagarro.validator.CustomValidator')">
        <intbox
            value="@save(vm.quantity) @validator(vm.rangeValidator)" />

        <button label="Submit"></button>
    </window>
</zk>

视图模型 CustomValidator.java

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


public class CustomValidator implements Validator{

    private Validator rangeValidator;

    private String quantity;

    /**
     * @return the quantity
     */
    public String getQuantity() {
        return quantity;
    }

    /**
     * @param quantity
     *            the quantity to set
     */
    public void setQuantity(String quantity) {
        this.quantity = quantity;
    }
    @Override
    public void validate(ValidationContext ctx) {


    }

    /**
     * @return the rangeValidator
     */
    public Validator getRangeValidator() {
        return new AbstractValidator() {
            public void validate(ValidationContext ctx) {
                Integer val = (Integer)ctx.getProperty().getValue();
                if(val<10 || val>100){
                    addInvalidMessage(ctx, "value must not < 10 or > 100, but is "+val);
                }
            }
        };
    }

    /**
     * @param rangeValidator the rangeValidator to set
     */
    public void setRangeValidator(Validator rangeValidator) {
        this.rangeValidator = rangeValidator;
    }

}

请弄清楚上述代码中的错误。 :)

运行上面的代码时出现以下警告。

Jan 16, 2013 4:58:07 PM org.zkoss.bind.validator.AbstractValidator
addInvalidMessages:84 WARNING: ValidationMessages not found on binder
org.zkoss.bind.AnnotateBinder@cf7fda, please init it

我应该如何设置验证消息请帮助。 :)

1 个答案:

答案 0 :(得分:2)

结帐this或使用constraints查看InputElements 如果您需要更多详细信息或遇到问题,请提供一些代码。

修改

你错过了

validationMessages="@id('vmsgs')

Window 请阅读this以了解。