我正在读这篇文章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 不支持它)。默认情况下这些是读/写的,允许 setValue
和 getValue
方法不仅可以读取值,还可以选择再次写回某些内容。
这个 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/