Java 如何在ZK中的TreeNode结构中选择树节点?

Java 如何在ZK中的TreeNode结构中选择树节点?,java,zk,treenode,jooq,Java,Zk,Treenode,Jooq,我已经根据所选数据的父节点和子节点的数量创建了一个树,但在渲染该树后,我不知道所选数据的节点,我必须默认选择该节点。那么,如何搜索所需的节点并将其选中呢 <tree model="@load(vm.peopleTreeModel)" selectedItem="@load(vm.selectedPeopleTreeNode)" sizedByContent="true" droppable="true" width="100%" vflex="1"

我已经根据所选数据的父节点和子节点的数量创建了一个树,但在渲染该树后,我不知道所选数据的节点,我必须默认选择该节点。那么,如何搜索所需的节点并将其选中呢

<tree model="@load(vm.peopleTreeModel)"
        selectedItem="@load(vm.selectedPeopleTreeNode)"
        sizedByContent="true" droppable="true" width="100%" vflex="1"
        hflex="1" visible="@load(vm.relatedView)">
        <template name="model" var="node">
            <treeitem open="@bind(node.open)">
                <treerow>
                    <treecell
                        label="@bind(node.data.name)" sclass="field-label"
                        onClick="@command('showPeopleDetailFromTree' , peopleRSN=node.data.description)"
                        onDoubleClick="@command('showPeopleDetailOnDoubleClickFromTree' , peopleRSN=node.data.description)" />
                    </treerow>
                </treeitem>
            </template>
        </tree>

以及我们的视图模型

public void createPeopleTreeModel(int argpeopleID) {
        parentNodeChildList = new ArrayList<Integer>();
        treeNodeMap = new HashMap<Integer, DemoTreeNode>();
        Integer peopleID;
        List<Integer> peopleIDList = new ArrayList<Integer>();
        for (Integer peopleId : childrenList) {
            peopleIDList.add(peopleId);
            String peopleName = Services.peopleService().getPeopleNameByPeopleID(peopleId);

            treeNodeMap.put(peopleId, new DemoTreeNode(new FolderTree(peopleName, peopleId.toString()), new DemoTreeNode[] {}, true));

        }
        for (Integer peopleIDTemp : peopleIDList) {
            Result<Record> recordList = Transaction.current().select(People.PEOPLE.PEOPLE_ID).from(People.PEOPLE)
                    .where(People.PEOPLE.PARENT_ID.eq(peopleIDTemp)).fetch();

            DemoTreeNode treeNode = (DemoTreeNode) treeNodeMap.get(peopleIDTemp);
            if (recordList.size() > 0) {
                for (Record record : recordList) {
                    peopleID = record.getValue(People.PEOPLE.PEOPLE_ID);
                    DemoTreeNode treeChildNode = treeNodeMap.get(peopleID);
                    treeChildNode.setOpen(true);
                    treeNodeMap.put(peopleID, treeChildNode);
                    treeNode.add(treeChildNode);
                    if (peopleIDTemp == argpeopleID) {
                        parentNodeChildList.add(peopleID);
                    }
                }
            }
            treeNodeMap.put(peopleIDTemp, treeNode);// Here I am putting the treenode and below checking the selected data condition I set the selected peopleTree Node to it selected, but it is not working.
            if (selectedPeopleData.getPeopleID() == peopleIDTemp) {
                setSelectedPeopleTreeNode(treeNode);
            }
        }
        List<DemoTreeNode> rootNodeChildList = new ArrayList<DemoTreeNode>();
        rootNodeChildList.add(treeNodeMap.get(argpeopleID));
        DemoTreeNode[] rootNodeArray = new DemoTreeNode[rootNodeChildList.size()];
        rootNodeChildList.toArray(rootNodeArray);
        DemoTreeNoderootNode = new DemoTreeNode(null, rootNodeArray, true);
        peopleTreeModel = new DemoTreeModel(rootNode);

        BindUtils.postNotifyChange(null, null, this, "peopleTreeModel");
        BindUtils.postNotifyChange(null, null, this, "selectedPeopleTreeNode");
    }
public void createPeopleTreeModel(int-argpeopleID){
parentNodeChildList=newArrayList();
treeNodeMap=newhashmap();
整型人;
List peopleIDList=new ArrayList();
for(整数peopleId:childrenList){
peopleIDList.add(peopleId);
字符串peopleName=Services.peopleService().getPeopleNameByPeopleID(peopleId);
treeNodeMap.put(peopleId,新的Demogreenode(新的FolderTree(peopleName,peopleId.toString()),新的Demogreenode[]{},true));
}
for(整数peopleIDTemp:peopleIDList){
结果记录列表=Transaction.current()。选择(People.People.People\u ID)。从(People.People)
.where(People.People.PARENT_ID.eq(peopleIDTemp)).fetch();
demogreenode treeNode=(demogreenode)treeNodeMap.get(peopleIDTemp);
如果(recordList.size()>0){
用于(记录:记录列表){
peopleID=record.getValue(People.People.People\u ID);
demoreenode treeChildNode=treeNodeMap.get(peopleID);
treeChildNode.setOpen(true);
treeNodeMap.put(peopleID,treeChildNode);
添加(treeChildNode);
if(peopleIDTemp==argpeopleID){
parentNodeChildList.add(peopleID);
}
}
}
treeNodeMap.put(peopleIDTemp,treeNode);//我在这里放置treeNode,并在下面检查选定的数据条件,我将选定的peopleTree节点设置为选中,但它不工作。
如果(selectedPeopleData.getPeopleID()==peopleIDTemp){
设置选定的人树节点(树节点);
}
}
List rootNodeChildList=new ArrayList();
rootNodeChildList.add(treeNodeMap.get(argpeopleID));
DemoReenode[]rootNodeArray=新的DemoReenode[rootNodeChildList.size()];
rootNodeChildList.toArray(rootNodeArray);
demogreenoderootnode=新的demogreenode(null,rootnoderray,true);
peopleTreeModel=新的DemoReeModel(根节点);
postNotifyChange(null,null,这是“peopleTreeModel”);
postNotifyChange(null,null,这是“selectedPeopleTreeNode”);
}

更改
selectedItem=“@bind(vm.selectedPeopleTreeNode)”

使用bind代替load

并且您可以对父组件使用Invalidate,因为在通知时会出现一些时间问题