我試圖顯示一個分類樹,下面是基本的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