【问题标题】:Magnolia - Cross field validationMagnolia - 跨领域验证
【发布时间】:2020-09-02 13:07:11
【问题描述】:

我们有以下要求。

Field 1 : comboBoxField,必填。

字段 2:组合框字段

案例1.如果编辑器选择字段1的值为“value1”,则字段2为必填项

案例2:如果编辑器选择字段1的值为“value2”,那么字段2是可选的。

如何在提交操作之前在表单/字段验证中进行此验证。

或者我们如何在提交操作中进行验证。

任何线索都会对我有很大帮助。我被这个问题困扰了很长时间。

我按照文档中的建议尝试了跨字段、动态字段、可切换和复合字段,但出现空指针异常。如果您知道解决方案,也请分享代码 sn-p。

【问题讨论】:

    标签: magnolia


    【解决方案1】:

    我也遇到过这种类型的验证。问题在于字段的隔离。我找不到根据另一个字段值验证一个字段的方法。

    无论如何,我找到了解决方法。我聚合了两个具有复杂字段的依赖字段并为其创建了一个验证器。

    这是我的 Magnolia 5.7 和 vaadin 验证器代码(第 7 版已弃用,但逻辑​​与第 8 版相同)。

    public class CompanyRequiredFieldsValidator implements Validator {
    
        private final ConfiguredFieldValidatorDefinition definition;
    
        public CompanyRequiredFieldsValidator(ConfiguredFieldValidatorDefinition definition) {
            this.definition = definition;
        }
    
        @Override
        public void validate(Object value) throws InvalidValueException {
            Optional<String> companyName = getString(value, "companyName");
            if (companyName.isPresent()) {
                getString(value, "companyAddress")
                        .orElseThrow(() -> new InvalidValueException(definition.getErrorMessage()));
            }
        }
    
        private Optional<String> getString(Object value, String property) {
            return Optional.of(value)
                    .filter(Item.class::isInstance).map(Item.class::cast)
                    .map(_v -> _v.getItemProperty(property))
                    .map(Property::getValue)
                    .filter(String.class::isInstance).map(String.class::cast)
                    .filter(StringUtils::isNotEmpty);
        }
    
    }
    

    对于复杂字段,验证值具有 com.vaadin.v7.data.Item 类型,因此可以从中获取所有属性。

    唯一的问题是错误消息没有突出显示内部字段,仅突出显示整个复杂字段。

    【讨论】:

    • 感谢您的解决方案。我们尝试了不同的方法。当用户点击 UI 中的保存按钮时,我们通过读取这些字段的表单视图数据来处理验证,并向他们显示带有适当消息的警报消息。
    猜你喜欢
    • 2021-11-06
    • 2011-07-20
    • 1970-01-01
    • 2013-06-02
    • 2011-05-31
    • 1970-01-01
    • 2015-02-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多