You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@myfaces.apache.org by Rick Hightower <rh...@arc-mind.com> on 2006/07/20 22:30:48 UTC

How do you get Tree2 expandAll to work?

The example throws an exception. My code does not throw an exception but it
does not fully expand the tree either.

 

Here is what I tried:

 

    public String myOrgExpandAll() {

          myOrgTreeComponent.expandAll();

 

 

        return null;

    }

 

The above works when the tree first loads but if the user expands any tree
nodes, it stops working.

 

 

I also tried this:

    public String myOrgExpandAll() {

 
this.myOrgTreeComponent.getDataModel().getTreeState().setSelected("0");

        myOrgTreeComponent.expandAll();

        return null;

    }

 

This works better in that an expand always happens, but it is not recursive.
Instead of an expandAll functionality, it becomes the functionality of
expand the root node and then display children in whatever state they happen
to be in. We are replacing an existing application that has a working client
tree. This needs to work for us.

 

We looked at the example code. We are doing the same thing. We looked at the
test cases (Junit test), we are doing the same thing.

 

Do you guys have any thoughts on how to get this to work?

 

 

Here is the code:

 

package qcom.cas.mysourcej.poc.backingbean;

 

import org.apache.myfaces.custom.tree2.HtmlTree;

import org.apache.myfaces.custom.tree2.TreeState;

import org.apache.myfaces.custom.tree2.TreeStateBase;

import org.apache.myfaces.custom.tree2.TreeWalker;

 

import org.apache.myfaces.custom.tree2.TreeModel;

 

import java.io.Serializable;

import java.util.List;

 

import qcom.cas.commons.faces.TreeModelBuilder;

import qcom.cas.commons.dao.dataproducer.DataProducer;

import qcom.cas.mysourcej.poc.model.Employee;

 

/**

 * Created by IntelliJ IDEA.

 * User: Rick

 * Date: Jul 10, 2006

 * Time: 2:12:29 PM

 * To change this template use File | Settings | File Templates.

 */

public class QuickOrgBackingBean implements Serializable {

 

    private HtmlTree myOrgTreeComponent;

 

    private  TreeModel myOrgTreeModel;

 

    private TreeModelBuilder tree2ModelBuilder;

 

    private DataProducer myOrgDirectDataProducer;

 

    private Employee currentQuickOrgEmployee;

 

    private boolean show;

 

    private String emplid;

 

 

    public String myOrgClicked() {

        if (!this.show) {

            this.show=true;

            loadQuickOrgData();

        } else {

            this.show=false;

            myOrgTreeModel = null;

        }

        return null;

    }

 

 

    public HtmlTree getMyOrgTreeComponent() {

        return myOrgTreeComponent;

    }

 

    public void setMyOrgTreeComponent(HtmlTree myOrgTreeComponent) {

        this.myOrgTreeComponent = myOrgTreeComponent;

    }

 

    public TreeModel getMyOrgTreeModel() {

        return myOrgTreeModel;

    }

 

    public void setMyOrgTreeModel(TreeModel myOrgTreeModel) {

        this.myOrgTreeModel = myOrgTreeModel;

    }

 

    public TreeModelBuilder getTree2ModelBuilder() {

        return tree2ModelBuilder;

    }

 

    public String goUpALevel() {

        if (this.currentQuickOrgEmployee!=null) {

           String bossId = this.currentQuickOrgEmployee.getBossId();

           /* Eventually someone does not have a boss. */

           if (bossId!=null && !"".equals(bossId.trim())) {

                this.emplid = bossId;

                loadQuickOrgData();

           }

        }

        return null;

    }

 

    public void setTree2ModelBuilder(TreeModelBuilder tree2ModelBuilder) {

        this.tree2ModelBuilder = tree2ModelBuilder;

    }

 

    public DataProducer getMyOrgDirectDataProducer() {

        return myOrgDirectDataProducer;

    }

 

    public void setMyOrgDirectDataProducer(DataProducer
myOrgDirectDataProducer) {

        this.myOrgDirectDataProducer = myOrgDirectDataProducer;

    }

 

    public Employee getCurrentQuickOrgEmployee() {

        return currentQuickOrgEmployee;

    }

 

    public void setCurrentQuickOrgEmployee(Employee currentQuickOrgEmployee)
{

        this.currentQuickOrgEmployee = currentQuickOrgEmployee;

    }

 

    public boolean isShow() {

        return show;

    }

 

    public void setShow(boolean show) {

        this.show = show;

    }

 

 

    public String myOrgExpandAll() {

 
this.myOrgTreeComponent.getDataModel().getTreeState().setSelected("0");

        myOrgTreeComponent.expandAll();

 

 

        return null;

    }

 

    public String myOrgCollapseAll() {

 
this.myOrgTreeComponent.getDataModel().getTreeState().setSelected("0");

            myOrgTreeComponent.collapseAll();

 

        return null;

    }

 

 

    void loadQuickOrgData() {

        if (show) {

            List employees = myOrgDirectDataProducer.list();

            MySourceBackingBeanUtils.buildEmployeeObjectHierarchy(employees,
true);

            this.currentQuickOrgEmployee = (Employee) employees.get(0);

            myOrgTreeModel = (org.apache.myfaces.custom.tree2.TreeModel)
tree2ModelBuilder.createTreeModelFromList(employees);

            if (this.myOrgTreeComponent!=null){

                myOrgTreeComponent = new HtmlTree();

            }

        }

    }

 

 

    public String getEmplid() {

        return emplid;

    }

 

    public void setEmplid(String emplid) {

        this.emplid = emplid;

    }

}

 

Facelets composition component tied to the above backingBean

 

 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

 

<html xmlns="http://www.w3.org/1999/xhtml"

      xmlns:ui="http://java.sun.com/jsf/facelets"

      xmlns:h="http://java.sun.com/jsf/html"

      xmlns:f="http://java.sun.com/jsf/core"

      xmlns:c="http://java.sun.com/jstl/core"

        xmlns:t="http://myfaces.apache.org/tomahawk"

        xmlns:afh="http://xmlns.oracle.com/adf/faces/html"

      xmlns:af="http://xmlns.oracle.com/adf/faces"

        >

 

 

<ui:composition>

        <div>

            <div jsfc="h:panelGroup" rendered="#{backingBean.show}">

                <h:commandLink action="#{backingBean.myOrgExpandAll}">Expand
All</h:commandLink>

                <span>&nbsp;</span>

                <h:commandLink
action="#{backingBean.myOrgCollapseAll}">Collapse All</h:commandLink>

                <span>&nbsp;</span>

                <h:commandLink
action="#{backingBean.goUpALevel}">Up</h:commandLink>

            </div>

 

 

        <t:tree2 id="myOrgTree" value="#{backingBean.myOrgTreeModel}"
var="node" varNodeToggler="t"

                                    rendered="#{backingBean.show}"

                                binding="#{backingBean.myOrgTreeComponent}">

                  <f:facet name="root">

                        <div jsfc="h:panelGroup">

                              <t:graphicImage
value="/images/yellow-folder-open.png" rendered="#{t.nodeExpanded}"
border="0" />

                              <t:graphicImage
value="/images/yellow-folder-closed.png" rendered="#{!t.nodeExpanded}"
border="0" />

                              <h:outputText value="#{node.description}"
styleClass="nodeFolder" />

                        </div>

                  </f:facet>

                  <f:facet name="folder">

                        <div jsfc="h:panelGroup">

                              <t:graphicImage
value="/images/yellow-folder-open.png" rendered="#{t.nodeExpanded}"
border="0" />

                              <t:graphicImage
value="/images/yellow-folder-closed.png" rendered="#{!t.nodeExpanded}"
border="0" />

                              <h:outputText value="#{node.description}"
styleClass="nodeFolder" />

                        </div>

                  </f:facet>

                  <f:facet name="node">

                        <div jsfc="h:panelGroup">

                              <t:graphicImage
value="/images/yellow-folder-open.png" rendered="#{t.nodeExpanded}"
border="0" />

                              <t:graphicImage
value="/images/yellow-folder-closed.png" rendered="#{!t.nodeExpanded}"
border="0" />

                    <a jsfc="h:commandLink" immediate="true"
styleClass="#{t.nodeSelected ? 'documentSelected':'document'}"

 
action="#{nodeListener.nodeClicked}"

 
rendered="#{node.data.hasOrganization}">

                                    <f:param name="emplid"
value="#{node.data.emplid}" />

 

                                                                  <span
jsfc="h:outputText" rendered="#{not
(node.data.emplid==nodeListener.emplid)}"

 
value="#{node.description}" styleClass="nodeFolder" />

                                    <span jsfc="h:outputText"
rendered="#{node.data.emplid==nodeListener.emplid}"

 
value="#{node.description}" styleClass="nodeFolder"

 
style="font-weight: bold"/>

 

 

                              </a>

 

 

                                                            <span
jsfc="h:outputText" rendered="#{not node.data.hasOrganization}"

                                    value="#{node.description}"/>

 

                        </div>

                  </f:facet>

             </t:tree2>

 

         </div>

</ui:composition>

</html>

 

 

More info on this

http://jroller.com/page/RickHigh?entry=jee_wartac_jsf_thrid_party