我正在使用smartgwt树组件。我试着将它扩展到usertree,就像下面的课程一样:
public UserTree() {
final List<NewNode> lista = new ArrayList<NewNode>();
lista.add(new NewNode(4,"333"));
setModelType(TreeModelType.PARENT);
setIdField("UserViewId");
setParentIdField("ReportsTo");
setNameProperty("Uzytkownicy");
zapelnijListeUzytkownikow(lista);
setRootValue(1);
setData(userViewData);
administrationService.zapelnijListeWezlow(token, new AsyncCallback<List<NewNode>>() {
@Override
public void onSuccess(List<NewNode> result) {
zapelnijListeUzytkownikow(result);
setData(userViewData);
}
@Override
public void onFailure(Throwable caught) {
Window.alert("fail");
}
};
}
protected TreeNode[] zapelnijListeUzytkownikow(List<NewNode> result) {
userViewData = new TreeNode[12];
/* userViewData = new TreeNode[result.size() + 4];
userViewData[0] = new UserViewTreeNode("2", "1", "Administratorzy");
userViewData[1] = new UserViewTreeNode("3", "1", "Uprzywilejowani");
userViewData[2] = new UserViewTreeNode("4", "1", "Uzytkownicy");
userViewData[3] = new UserViewTreeNode("5", "1", "Pozostali");
int i = 4;
for(NewNode nn : result) {
userViewData[i] = new UserViewTreeNode(String.valueOf(nn.getId()), "2", nn.getName());
i++;
}*/
userViewData[0] = new UserViewTreeNode("2", "1", "Administratorzy");
userViewData[1] = new UserViewTreeNode("3", "1", "Uprzywilejowani");
userViewData[2] =new UserViewTreeNode("4", "1", "Uzytkownicy");
userViewData[3] =new UserViewTreeNode("5", "1", "Pozostali");
userViewData[4] = new UserViewTreeNode("18", "2", "Fasola Jan");
userViewData[5] =new UserViewTreeNode("19", "2", "Puchatek Jakub");
userViewData[6] =new UserViewTreeNode("20", "3", "Klapouchy");
userViewData[7] =new UserViewTreeNode("21", "3", "Król Lew");
userViewData[8] =new UserViewTreeNode("22", "4", "Bolek");
userViewData[9] =new UserViewTreeNode("23", "4", "Lolek");
userViewData[10] =new UserViewTreeNode("24", "5", "Gargamel");
userViewData[11] =new UserViewTreeNode("25", "5", "Ciamajda");
return userViewData;
}
我想使用asyncallback将数据从数据库放到这棵树上。它运行良好,但如果我想在onSuccess方法中使用setData方法,我得到一个错误:
“在创建组件后,无法将配置属性'data'更改为[Lcom.smartgwt.client.widgets.tree.TreeNode; @ 3c01807。”
如何在树创建后刷新树上的数据?我想清理树上的所有值并放置由ZapelnijListeWezlow方法生成的值 谢谢你的帮助!
答案 0 :(得分:1)
我想我找到了答案。树组件是只读的。但是树格没有。所以我决定将TreeGrid扩展到UserTreeGrid,并且当我想要刷新树时,我只是做了类似的事情:
UserTreeView ust = new UserTreeView(); ... ... ... ust.setData(tree)&lt; - 我无法将新值添加到树中,因此我使用新数据创建新树并将其放在此处而不是旧树中。
答案 1 :(得分:0)
在没有“正确”数据源(即客户端)的情况下创建的数据绑定元素(例如TreeGrid和ListGrid)只能在创建时加载数据,我相信您已经知道了。你收到的消息说明了这一点。 另一个解决方案,正确的一个IMO,虽然更复杂,但是创建一个不依赖于SC服务器的数据源,因此使用了smartgwt库的LGPL版本,但利用了GWT的传输方法(即GWT-RPC)或者RequestBuilder。这将允许您通过简单的fetch()重新加载树。您可以在以下论坛thread中找到这种方法的详细信息。它讨论了GWT-RPC方法,但您可以推断它创建一个RequestBuilder。