0

Tree.getItems() behavior

asked 2009-10-06 11:59:46 +0800

comag gravatar image comag
90 2

updated 2009-10-06 12:00:10 +0800

Hi.

The api for Tree.getItems() says: "Returns a readonly list of all descending Treeitem (children's children and so on)."
But in contrast to the api, the list only contains the children of the root node. Did i misunderstood the api?

I'm using version 3.6.2.

delete flag offensive retag edit

13 Replies

Sort by ยป oldest newest

answered 2009-10-06 14:52:35 +0800

comag gravatar image comag
90 2

updated 2009-10-06 15:02:18 +0800

i tried to workaround this problem with this code.

	protected <T> void setSelectedValues(Tree tree, Collection<T> selectedValues, boolean add) {
		if (!add) tree.clearSelection();
		
		for (Object o: tree.getItems()) {
			Treeitem item = (Treeitem) o;
			setSelectedValues(tree, item, selectedValues);
		}		
	}
	
	@SuppressWarnings("unchecked")
	private <T> void setSelectedValues(Tree tree,  Treeitem currentItem, Collection<T> selectedValues) {
		T value = (T) currentItem.getValue();
		if (selectedValues.contains(value)) {
			tree.addItemToSelection(currentItem);
		}		
		
		Treechildren children = currentItem.getTreechildren();
		if (children != null) {
			for (Object o: children.getItems()) {
				Treeitem child = (Treeitem) o;
				setSelectedValues(tree, child, selectedValues);
			}
		}	

The problem is that treeitem.getTreechildren().getItems().size() is allways zero! I know that the tree has multiple levels... i see it.
whats wrong here?

link publish delete flag offensive edit

answered 2009-10-06 15:14:28 +0800

comag gravatar image comag
90 2

ok, it seems that treechildren.getItems() only returns visible (expanded) items.
so my question is: how to select a not expanded item on a multi-selection tree?

link publish delete flag offensive edit

answered 2009-10-12 03:22:51 +0800

jumperchen gravatar image jumperchen
3909 2 8
http://jumperchen.blogspo... ZK Team

Hi,

The getItems() will return all of its child items whatever it is visible or not
For example, it works well.

<zk>

<tree id="tree" width="400px" rows="8">
	<treecols sizable="true">
		<treecol label="Name" />
		<treecol label="Description" />
	</treecols>
	<treechildren>
		<treeitem>
			<treerow>
				<treecell label="Item 1" />
				<treecell label="Item 1 description" />
			</treerow>
		</treeitem>
		<treeitem  open="false">
			<treerow>
				<treecell label="Item 2" />
				<treecell label="Item 2 description" />
			</treerow>
			<treechildren id="tc">
				<treeitem>
					<treerow>
						<treecell label="Item 2.1" />
					</treerow>
					<treechildren>
						<treeitem>
							<treerow>
								<treecell label="Item 2.1.1" />
							</treerow>
						</treeitem>
						<treeitem>
							<treerow>
								<treecell label="Item 2.1.2" />
							</treerow>
						</treeitem>
					</treechildren>
				</treeitem>
				<treeitem>
					<treerow>
						<treecell label="Item 2.2" />
					</treerow>
					<treechildren>
						<treeitem>
							<treerow>
								<treecell label="Item 2.2.1" />
							</treerow>
						</treeitem>
					</treechildren>
				</treeitem>
			</treechildren>
		</treeitem>
		<treeitem label="Item 3" />
	</treechildren>
</tree>
<button label="show items" onClick='alert(tc.getItems().size())'/>
</zk>

/Jumper

link publish delete flag offensive edit

answered 2009-10-22 10:50:44 +0800

comag gravatar image comag
90 2

thanks for your reply.
in contrast to your example i'm using a tree model:

  
<tree id="treeModules" multiple="true" checkmark="true" model="${myComposer.availableModules}">					
    <treefoot>
        <treefooter label="Quelle: ${myComposer.moduleService.applicationWrapper.name}"/>				             
    </treefoot>							
</tree>	

the tree shows initially only the root expanded.
and you can trust me - Tree.getItems() will only return the root children in this case.

link publish delete flag offensive edit

answered 2009-10-27 05:57:26 +0800

jumperchen gravatar image jumperchen
3909 2 8
http://jumperchen.blogspo... ZK Team

Hi,

You can invoke this method before you invoke getItems()

link publish delete flag offensive edit

answered 2009-10-28 11:10:13 +0800

comag gravatar image comag
90 2

that did the trick. thanks!
should be documented somewhere ;)

link publish delete flag offensive edit

answered 2009-11-17 11:27:12 +0800

daveinstl gravatar image daveinstl
81

I am having the same trouble. What is "this method" in org.zkoss.zul.Tree? Thanks.

link publish delete flag offensive edit

answered 2009-11-17 22:21:10 +0800

jumperchen gravatar image jumperchen
3909 2 8
http://jumperchen.blogspo... ZK Team

It is a link, you can click upon it. - http://www.zkoss.org/javadoc/3.6/zk/org/zkoss/zul/Tree.html#renderItem%28org.zkoss.zul.Treeitem%29

link publish delete flag offensive edit

answered 2009-11-18 07:02:30 +0800

daveinstl gravatar image daveinstl
81

Right, but IE7 takes me to the top of the page for the Tree class, so I am not sure which method is referred to. Thanks.

link publish delete flag offensive edit

answered 2009-11-18 19:19:25 +0800

PeterKuo gravatar image PeterKuo
481 2

@daveinstl

You may observe the contain url of a hyperlink.

link publish delete flag offensive edit
Your reply
Please start posting your answer anonymously - your answer will be saved within the current session and published after you log in or create a new account. Please try to give a substantial answer, for discussions, please use comments and please do remember to vote (after you log in)!

[hide preview]

Question tools

Follow

RSS

Stats

Asked: 2009-10-06 11:59:46 +0800

Seen: 1,395 times

Last updated: Jan 31 '11

Support Options
  • Email Support
  • Training
  • Consulting
  • Outsourcing
Learn More