1

我正在使用 smartgwt 树组件。我试图将它扩展到用户树,如下面的类:

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 方法生成的值感谢您的帮助!

4

2 回答 2

1

我想我找到了答案。树组件是只读的。但树网格不是。所以我决定将 TreeGrid 扩展到 UserTreeGrid,并且总是当我想刷新树时,我只是做这样的事情:

UserTreeView ust = new UserTreeView(); ... ... ... ust.setData(tree) <-- 我无法将新值放入树中,因此我使用新数据创建新树并将其放在这里而不是旧树。

于 2012-10-18T12:06:35.443 回答
0

没有“正确”数据源(即客户端)创建的数据绑定元素(例如 TreeGrid 和 ListGrid)只能在创建时加载数据,我相信您已经知道。您收到的消息准确地说明了这一点。另一种解决方案,也是正确的 IMO,虽然更复杂,但创建一个不依赖于 SC 服务器的数据源,从而使用 smartgwt 库的 LGPL 版本,但利用 GWT 的传输方法(即 GWT-RPC或 RequestBuilder。这将允许您通过简单的 fetch() 重新加载树。您可以在以下论坛主题中找到这种方法的详细信息。它讨论了 GWT-RPC 方法,但您可以推断它来创建 RequestBuilder一。

于 2012-10-20T13:46:57.837 回答