我试图显示一个分类树,下面是基本的CellTree gwt示例。Gwt CellTree isLeaf()问题
我坚持的是确定一个类别的“叶”条件。
当它没有孩子的时候,是一个类别“is-a-leaf”,对吧?所以,这里是我的类别(我用客观化应用服务引擎的持久性):
@Entity
public class Categoria implements Serializable {
private static final long serialVersionUID = 1L;
@Id
Long id;
String nome;
Key<Categoria> parent;
public Categoria() { }
public Categoria(String nome) {
super();
this.nome = nome;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public Key<Categoria> getParent() {
return parent;
}
public void setParent(Key<Categoria> parent) {
this.parent = parent;
}
}
我TreeViewModel基于AsyncDataProvider(这是我从外面传):
public class CategorieTreeViewModel implements TreeViewModel {
private AbstractDataProvider<Categoria> dataProvider;
public CategorieTreeViewModel(AbstractDataProvider<Categoria> dataProvider) {
this.dataProvider = dataProvider;
}
@Override
public <T> NodeInfo<?> getNodeInfo(T value) {
return new DefaultNodeInfo<Categoria>(dataProvider, new CategoriaCell());
}
@Override
public boolean isLeaf(Object value) {
return false;
}
}
所以在这里,它是:
dataProvider = new AsyncDataProvider<Categoria>() {
@Override
protected void onRangeChanged(HasData<Categoria> display) {
updateTree();
}
};
private void updateTree() {
rpcService.getCategorie(new AsyncCallback<Categoria[]>() {
@Override
public void onSuccess(Categoria[] result) {
dataProvider.updateRowCount(result.length, true);
dataProvider.updateRowData(0, Arrays.asList(result));
}
@Override
public void onFailure(Throwable caught) {
Window.alert(caught.toString());
}
});
}
问题是:因为我的Category bean没有“叶子属性”,我怎么知道它是否有孩子?通过显式查询,但isLeaf方法需要同步返回,我怎样才能使我的rpc调用?
或者我可以检索getCategorie()调用中的“叶子”信息,在运行时填充属性,但这可能是性能问题。
我该怎么办?
最后,我这样做了。下一个问题可能是在哪里设置各种isLeaf标志!那么...在我的getCategorie()rpc方法: - 我检索所有类别 - 我循环每个类别和查询儿童 - 我设置叶真或假。不方便,不是吗?在你看来如何改进? –
@Fabio B.我编辑了我的答案以提供更完整的代码示例。 – Jason482