Vaadin中的交叉场验证策略

Lan*_*dei 5 java validation vaadin bean-validation vaadin7

在Vaadin中,字段验证工作很简单,但你不能用它来检查字段之间的关系(例如,加入日期必须在离开日期之前),这真的很烦人.所以我使用JSR 303添加了标准的类级别验证,可以做到这一点.这很好用.

但是只有在我提交字段后才能执行此交叉字段验证.这意味着bean已经包含所有字段更改,并且在验证问题的情况下,我需要有可能在字段提交之前"返回"到有效状态(或以某种方式强制"重新加载"bean),否则我坚持更改,例如,如果用户决定取消编辑操作.

当然我之前可以保存所有字段内容,并手动重置状态,但鉴于Vaadin在简单字段验证的情况下完全相同,我想重用该机制.但是看看Vaadin代码,我不太自信我能弄明白该做什么,并且做得对.

请给我一些提示,如何在不重新发明轮子的情况下解决这个问题.

nex*_*xus 4

您可以将提交处理程序添加到您的FieldGroup. 这允许您检查承诺之前/之后:

binder.addCommitHandler(new CommitHandler() {

    @Override
    public void preCommit(CommitEvent commitEvent) throws CommitException {
        // TODO throw new CommitException() if your validation fails
    }

    @Override
    public void postCommit(CommitEvent commitEvent) throws CommitException {
        // TODO throw new CommitException() if your validation fails
    }
});
Run Code Online (Sandbox Code Playgroud)

所以应该可以进行“跨领域”验证。