0

我在新的 Neon Scout 中有列表框,我想验证设置的值。

我已经实现了execValidateValue方法:

  @Override
  protected Set<String> execValidateValue(final Set<String> rawValue) {

    if (rawValue.contains(CONSTANT.UNKNOWN)) {
      final Set<String> unknownSet = new HashSet<String>();
      unknownSet.add(CONSTANT.UNKNOWN);
      return super.execValidateValue(unknownSet);
    }

    return super.execValidateValue(rawValue);
  }

但它似乎没有任何效果。在调试时,我看到使用正确的字符串列表调用内部setValue(VALUE rawValue)方法。updateDisplayText(validatedValue)

这是为什么?有什么我做错了吗?

马尔科

4

1 回答 1

0

你是对的...如果在验证期间(在 中execValidateValue(VALUE rawValue))按照 JavaDoc 的建议更改了值,则该值会正确存储在 Scout 模型中,但更改不会反映在 HTML-UI 中。

在 Samuel Renold 的帮助下,我向团队询问了这个问题:HTML-UI 将被修复以反映 UI 的变化。请参阅错误 493778


演示小部件应用程序的测试代码。更改. DefaultField_ListBoxForm

@Order(20)
public class DefaultField extends AbstractListBox<Color> {

  @Override
  protected Class<? extends ICodeType<?, Color>> getConfiguredCodeType() {
    return ColorsCodeType.class;
  }

  @Override
  protected Set<Color> execValidateValue(Set<Color> rawValue) {
    System.out.println(">> execValidateValue");
    printColors(rawValue);
    if (rawValue != null && rawValue.contains(Color.RED)) {
      return super.execValidateValue(Collections.singleton(Color.RED));
    }
    return super.execValidateValue(rawValue);
  }

  private void printColors(Set<Color> rawValue) {
    if (rawValue != null) {
      for (Color color : rawValue) {
        System.out.print(color + ", ");
      }
      System.out.println("");
    }
    else {
      System.out.println("null");
    }
  }

  @Override
  protected void execChangedValue() {
    System.out.println(">> execValidateValue");
    printColors(getValue());

  }

  @Override
  protected int getConfiguredGridH() {
    return 5;
  }

  @Override
  protected String getConfiguredLabel() {
    return TEXTS.get("Default");
  }
}

错误行为也可以在 Scout 4 中重现(此版本已停产)

于 2016-02-16T17:21:55.450 回答