0

重要编辑:我为情况添加了一个深度级别,以更好地反映我的问题。

我有一个带有特定类型 ListStore 的 GXT Grid FooFoo碰巧有一些重要的对象属性,包括 type 之一Bar。TypeBar由两个对象属性组成:fooFooof typeFooFoobarBarof type Barbar。这两个可以null和有一个String属性description

草图

我想使用 GXT 网格的过滤来过滤Foo对象记录的BarFooFooBarBar描述。

我试图添加一个ValueProvider<Foo, String> barDescription();to FooProperties,结果是:

StringFilter<Foo> barbarFilter = new StringFilter<Foo>(fooProps.barbarDescription());

其中 Foo#getBarBarDescription() 实现如下:

public String getBarBarDescription() {
    return this.getBar().getBarBar().getDescription();
}

是否有一种简单/方便的方法可以在 GXT 中实现此行为?我还没有找到它。

我上面描述的实现是我尝试过的实现,但是过滤器根本没有出现在网格中,没有进一步的错误消息。

为了回应 Colin 对我的问题的先前版本的回答,我尝试了以下方法:

@Path("bar.barbar.description")
ValueProvider<Foo, String> barbarDescription();

希望它来电Foo#getBar().getBarBar().getDescription()。我怀疑 FooFoo 和 BarBar 的可能性null可能会导致问题。

4

1 回答 1

1

如果你想barDescription()调用getBar().getDescription()你的Foo对象,那么试试这个:

public interface FooProperties extends PropertyAccess<Foo> {

  @Path("bar.description")
  ValueProvider<Foo, String> barDescription();

  //...
}

注释在这里的@Path工作方式与在编辑器框架中的工作方式相同 - 您可以使用它来指定要访问的属性的路径。getBarDescription()这允许您跳过在自己的Foo对象中创建方法。

另一种选择是构建自己的ValueProvider实现。UsingPropertyAccess是一种要求编译器为你完成工作的方法,但没有什么能阻止你自己做。在这种情况下,它可能如下所示:

public class FooBarDescriptionValueProvider implements ValueProvider<Foo, String> {
  public String getValue(Foo object) {
    //TOOD consider a object.getBar() null check?
    return object.getBar().getDescription();
  }
  public void setValue(Foo object, String value) {
    object.getBar().setDescription(value);
  }
  public String getPath() {
    return "bar.description";
  }
}

请注意,这几乎正是 PropertyAccess 生成的版本的样子,但它允许您根据需要自定义行为。

于 2013-05-07T14:31:32.803 回答