【问题标题】:vaadin7 grid editorField can't set null representation?vaadin7 网格编辑器字段不能设置空表示?
【发布时间】:2016-05-11 12:31:21
【问题描述】:

仍然没有解决方案! (┬_┬)

我尝试使用以下代码设置空字符串的 NullRepresentation,但失败了,有人可以帮忙吗?或其他好的解决方案表示赞赏。

final Collection fields = this.grid.getEditorFieldGroup().getFields();
    fields.stream().forEach((field -> {
        if (field instanceof TextField) {
            ((TextField) field).setNullRepresentation("");
        }
    }));

我尝试使用自定义 FieldGroup 覆盖它,但又失败了。

public class CmsFieldGroup extends FieldGroup {

@Override
public Field<?> getField(final Object propertyId) {
    Field field = null;
    field = super.getField(propertyId);
    if (field instanceof TextField) {
        ((TextField) field).setNullRepresentation("");
    }

    return field;
}

@Override
public Collection<Field<?>> getFields() {
    final Collection<Field<?>> fields = super.getFields();
    fields.stream().forEach((field -> {
        if (field instanceof TextField) {
            ((TextField) field).setNullRepresentation("");
        }
    }));

    return fields;
}

}

final CmsFieldGroup cmsFieldGroup = new CmsFieldGroup();
    this.grid.setEditorFieldGroup(cmsFieldGroup);

【问题讨论】:

    标签: grid vaadin


    【解决方案1】:

    好像可以按如下方式完成,但是代码看起来很难看。

    public class CmsFieldGroup extends FieldGroup {
    
    @Override
    public Field<?> getField(final Object propertyId) {
        Field field = null;
        field = super.getField(propertyId);
        if (field instanceof TextField) {
            ((TextField) field).setNullRepresentation("");
        }
    
        return field;
    }
    
    @Override
    public Collection<Field<?>> getFields() {
        final Collection<Field<?>> fields = super.getFields();
        for (final Field field : fields) {
    
            try {
                if (field instanceof TextField && !"".equals(((TextField) field).getNullRepresentation())) {
                    ((TextField) field).setNullRepresentation("");
                }
            } catch (final Exception e) {
                System.out.print("something wrong");
            }
        }
    
        return fields;
    }
    

    }

    【讨论】:

      【解决方案2】:

      以下似乎也有效:

      FieldGroup fieldGroup = grid.getEditorFieldGroup();
      fieldGroup.setFieldFactory(new MyFieldGroupFieldFactory());
      

      MyFieldGroupFieldFactory 定义如下:

      class MyFieldGroupFieldFactory extends DefaultFieldGroupFieldFactory {
      
          @Override
          public <T extends Field> T createField(Class<?> type, Class<T> fieldType) {
              T field = super.createField(type, fieldType);
              if (field instanceof TextField) {
                  TextField textField = (TextField) field;
                  textField.setNullRepresentation("");
              }
              return field;
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-06-23
        • 1970-01-01
        • 1970-01-01
        • 2015-03-28
        • 2022-09-30
        • 1970-01-01
        相关资源
        最近更新 更多