1

MVVM アプローチを使用してサーバー側でフォーム検証を行う方法を説明してください。試してみましたが、効果的に行うことができませんでした。intboxなどを使用してクライアント側で小さな検証を行いましたが、次のような検証を行いたいです:

  1. 属性の値は、たとえば 100 を超えてはなりません。
  2. 属性 A の値がユーザーによって入力された場合、属性 B は必須になります。
  3. 属性 A の値が 100 で B が 50 の場合、属性 C の値は必須になり、150 を超えることはできません

MVVMでそれを行う方法を理解できません。ZK CE 6.0.0 バージョンを使用しています。

以下のコードを試しました:

検証.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>

ViewModel 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

検証メッセージを設定するにはどうすればよいですか 助けてください。:)

4

1 に答える 1

2

これを確認するか、 の制約を使用してくださいInputElements
詳細が必要な場合や問題がある場合は、コードを提供してください。

編集

あなたが行方不明です

validationMessages="@id('vmsgs')

あなたのWindowこれ
を 読んで理解してください。

于 2013-01-16T09:42:18.757 に答える