GXT ValueProvider动态值

时间:2014-06-05 08:33:19

标签: java gxt

我需要将列添加到GXT网格中。我可以这样做,但是当我想输入行数据时会出现问题。事实是,并非所有行都有特定的列。所以我想要实现的是检查给定的行是否具有特定的列并返回正确的值。

问题是,我的专栏的ValueProvider不允许在其方法中使用参数。所以我无法将列名传递给ValueProvider,因此它可以检查特定行中是否存在给定列并返回正确的数据。

这是我的专栏:

ColumnConfig<SomeClass, String> column = new ColumnConfig<SomeClass, String> (props.attributeValue(name), 150, name);

这是我的ValueProvider

ValueProvider<LimitDTO, String> attributeValue(String name);

这是我的实施(简化):

public String getAttributeValue(String name) {
    if(this.attributes.get(name) == null) {
        return "";
    } else {
        return this.attributes.get(name);
    }
}

但是我遇到了构建错误:

Method public abstract com.sencha.gxt.core.client.ValueProvider<com.example.SomeClass, java.lang.String> attributeValue(java.lang.String s) must not have parameters

感谢您的回答,我能够做到。这是我对ValueProvider的实现,以防有人寻找解决方案。毕竟,它并非如此艰难:)

public class CustomValueProvider implements ValueProvider<SomeClass, String> {

    public String column;

    public CustomValueProvider(String column) {
        this.column = column;
    }

    @Override
    public String getValue(SomeClass object) {
        if(object.getAttributes().get(column) == null) {
            return "";
        } else {
            return object.getAttributes().get(column);
        }
    }

    @Override
    public void setValue(SomeClass object, String value) {
    }

    @Override
    public String getPath() {
        return column.getName();
    }

}

以下是我如何使用它

LimitsValueProvider lvp = new LimitsValueProvider(name);
ColumnConfig<SomeClass, String> newColumn = new ColumnConfig<>(lvp, 150, name);

非常感谢!

1 个答案:

答案 0 :(得分:0)

我建议,不要使用

props.attributeValue(name)

相反,您可以关注帖子Dynamic charts in GXT 3,然后您可以创建自己的动态值提供程序(请参阅值提供程序部分),它将使用columnId(path)作为输入并执行相同的功能。

记住ValueProvider只是一个接口,使用GWT.create提供默认实现。