java - GXT 中的自引用 正确访问

标签 java gwt gxt

我正在读这篇文章documentation about GXT PropertyAccess .

我正在创建一个Grid<Stock>其中包含一个自定义列。本专栏需要ValueProvider它提供了整个 Stock :

public class MyCustomCol<T> extends ColumnConfig<T, Stock> {

  public MyCustomColl(ValueProvider<? super T, Stock> valueProvider, String header) {
    ...
  }
}

如何用 GXT 表达它 ProperyAccess

public interface StockPropertyAccess extends PropertyAccess<Stock>{

  @Editor.Path("") //Which Path should I use here? I unsuccessfully tried "" 
  ValueProvider<Stock, Stock> zis();

  ValueProvider<Stock, Integer> id();
  ValueProvider<Stock, String> name();
  ...
}

最佳答案

不是尝试为此创建一个生成的 ValueProvider 类型,而是已经存在一个类型。但首先:您需要一个谈论整个对象的 ValueProvider 是什么?

这个想法是,它提供了一种对对象属性的简单“反射”,但没有实际的反射(因为 GWT 不支持它)。默认情况下这些是读/写的,允许 setValuegetValue 方法不仅可以读取值,还可以选择再次写回某些内容。

这个 ValueProvider 接口(interface)也可以轻松地手动实现 - 如果 PropertyAccess 不知道如何解决您的问题,则无需从它开始为您做这件事。在谈论对象本身的情况下,您可以只返回原始对象。这是一个(部分实现的)想法:

public class IdentityValueProvider<T> implements ValueProvider<T, T> {
    public T getObject(T object) {
        return object;
    }
    public void setValue(T object, T value) {
        //can't do anything to set object to a new value, ignore, or throw exception
    }
    //...
}

这个类实际上存在于GXT中,并且被称为IdentityValueProvider,因为它返回与给定的对象相同的对象(它是一个“身份函数”)。如果您想自定义,您可以自己制作,否则,只需按原样传递即可:

ColumnConfig<Stock, Stock> column = 
        new ColumnConfig<Stock, Stock>(new IdentityValueProvider<Stock>());
<小时/>

在您的评论中,您进一步澄清您需要从完整对象中打印出 id + "-"+ name ,所以理想情况下您只想返回该字符串?这可能看起来像这样:

public class IdAndNameStringProvider implements ValueProvider<Stock, String> {
    public String getValue(Stock object) {
        return object.getId() + "-" + object.getName();
    }
    //...
}

关于java - GXT 中的自引用 正确访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24957057/

相关文章:

java - gxt gwt 日期字段语言未正确显示

java - Android中如何输出文本结果?

java - 如何让 GWT Super Dev Mode/SuperDevMode 包含我的 html 文件?

java - GXT 编辑器网格不显示任何行

css - 更新时忽略 GWT CSS

gwt - 如何获取 smartgwt 小部件的 html 元素 ID?

java - 从 Java 应用程序连接 LDAP 服务器

java - "Type Mismatch: Cannot Convert from int to ResultSet"

java - ActionPerformed 在 Java 中运行不佳

java - GET 方法中的内容类型未填充