我们想要在 GXT 中创建一个网格,其中网格中的数据是 JSON 对象,它是从客户端触发的查询的输出。
查询非常随机,并且具有在不同表上操作的不同列,我们对此一无所知。
严格来说我们没有任何模型类来创建网格。
如何解决这个问题。
提前致谢...
最佳答案
GXT 网格并不意味着那么通用,但它是可以做到的。这就是我的方法:
您需要一些模型类来使用。由于您不知道它包含哪些数据,因此您也必须使该数据抽象化。如果您也不了解数据类型,可以使用 Map<Integer, String>
如:列号,值。
收到数据后,您必须创建(或 reconfigure()
)网格。解析 json 后,您知道它包含多少列(每个条目的值)和行(条目)。假设您将所有行保存在一个列表中,因此我们有一个 List<Map<Integer, String>>
,其中每个列表条目代表一行,包含从 columnNumber 到值的映射。那么你需要这样一个ValueProvider:
public class RowColumnValueProvider implements ValueProvider<Integer, String> {
private final List<Map<Integer, String>> entries;
private final int column;
public RowColumnValueProvider(List<Map<Integer, String>> entries, int column) {
this.entries = entries;
this.column = column;
}
@Override
public String getValue(Integer row) {
return entries.get(row).get(column);
}
@Override
public void setValue(Integer row, String value) {
entries.get(row).put(column, value);
}
@Override
public String getPath() {
return String.valueOf(column);
}
}
然后,您使用不同的 ValueProvider ( new ValueProvider(columnIndex)
) 创建 ColumConfig,创建 ColumnModel 并将其分配给您的网格。
关于java - 如何在没有模型类的情况下从对象在 GXT 中创建网格?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25461477/