MVVM アプローチを使用してサーバー側でフォーム検証を行う方法を説明してください。試してみましたが、効果的に行うことができませんでした。intboxなどを使用してクライアント側で小さな検証を行いましたが、次のような検証を行いたいです:
- 属性の値は、たとえば 100 を超えてはなりません。
- 属性 A の値がユーザーによって入力された場合、属性 B は必須になります。
- 属性 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
検証メッセージを設定するにはどうすればよいですか 助けてください。:)