在我开发的定制处理器上,我希望属性验证能够将某些属性设置为可选(如果设置了另一个属性)。换句话说,仅当属性“ Engine”设置为“ FILE”时才需要属性“ File Name”。如果将属性“ Engine”设置为“ AWS”,则不需要属性“文件名”。如果有一种方法可以完全隐藏它,那就更好了。
我已经构建了100多个自定义处理器,一直想包括这种功能,但是还没有找到用于构建自定义UI的解决方案(我也做过-太多的工作)。
答案 0 :(得分:4)
尝试在处理器中实现customValidate(final ValidationContext validationContext)
,然后在此处添加所需的条件逻辑。
示例代码可能看起来像这样
@Override
protected Collection<ValidationResult> customValidate(final ValidationContext validationContext) {
final Collection<ValidationResult> results = new ArrayList<>();
final String engine = validationContext.getProperty(ENGINE).getValue();
if (FILES.equals(engine)) {
if (!validationContext.getProperty(FILE_NAME).isSet()) {
final String displayName = FILE_NAME.getDisplayName();
results.add(new ValidationResult.Builder()
.subject(displayName)
.explanation(format("'%s' is required to use '%s' listing strategy", displayName, FILES.getDisplayName()))
.valid(false)
.build());
}
}
return results;
}