You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@myfaces.apache.org by Anthony Hong <an...@gmail.com> on 2006/11/29 10:17:18 UTC

Tree2 question: How to retrieve entire path of current selected node?

Currently, when I click leaf node, a navigation is made to a new page.
I want to know the whole path by this leaf node.
I saw there is no method provided for retrieve parent by current tree
node or tree state.
Please help. Thanks

-- 

Anthony Hong

Re: Tree2 question: How to retrieve entire path of current selected node?

Posted by David Chandler <da...@learnjsf.com>.
I have the same scenario, and the only way I figured out to do it was to
have the action listener on the command link invoke a managed bean method
instead of "#{t.setNodeSelected}" as normal. This is in order to get to the
ActionEvent, from which you can walk the component tree to get a reference
to the Tree2 component. Then you call UITreeData.setNodeSelected() in the
same way that Tree2 would do if you used actionListener="#{t.setNodeSelected}",
and because you're calling it yourself, you can also save a reference to the
selected node in the managed bean. My code looks like this:

...
                    <h:commandLink immediate="true" styleClass="#{
t.nodeSelected ? 'documentSelected':'document'}"
                        actionListener="#{treeBacker.setNodeSelected}"
                        action="#{treeBacker.actionSelectNode}">
                        <h:outputText value="#{node.description}"
styleClass="#{node.style}"/>
                        <h:outputText value=" (#{node.childCount}) "
styleClass="childCount" />
                        <h:outputText value="*" styleClass="#{node.style}"
rendered="#{node.pendingOrWarning}" />
                    </h:commandLink>
...

in TreeBacker:

    /**
     * Sets the selected node in the Tree2 component as well as this backing
bean.
     * In Tomahawk 1.1.1, this method was unnecessary, as the selected node
could
     * be obtained from the TreeModel; however, this was removed in 1.1.3.
     *
     * @param event Faces ActionEvent
     */
    public void setNodeSelected (ActionEvent event)
    {
        UIComponent component = event.getComponent();
        UITreeData tree2 = null;

        // Find first parent tree component
        while (component != null)
        {
            component = component.getParent();
            if (component instanceof UITreeData)
            {
                tree2 = (UITreeData) component;
                break;
            }
        }
        // Set selected node and remember it in the action listener
        if (tree2 != null) {
            // Set new selected node
            tree2.setNodeSelected(event);
            this.selectedNode = tree2.getNode();
        }
    }


I've used this method bound to an action listener in the command link

On 11/29/06, Anthony Hong <an...@gmail.com> wrote:
>
> Currently, when I click leaf node, a navigation is made to a new page.
> I want to know the whole path by this leaf node.
> I saw there is no method provided for retrieve parent by current tree
> node or tree state.
> Please help. Thanks
>
> --
>
> Anthony Hong
>



-- 
David Chandler
Development Coach
learnjsf.com