Quantcast
Channel: Save Your Knowledge
Viewing all articles
Browse latest Browse all 9

Set different icons on the same level in a rich:tree

$
0
0

Today i need to set a different icon for different node on the same level of a richFaces tree.
Before this need i set icon image for each node level with facet:

<rich:treeNodesAdaptor id="level2" nodes="${level1.subDir}" var="lev2">
<rich:treeNode nodeSelectListener="${lev2.selectNode}" data="${lev2.desc}">
                  <f:facet name="icon">
                    <h:graphicImage value="/img/sitemap.png"/>
                  </f:facet>
                  <f:facet name="iconLeaf">
                    <h:graphicImage value="/img/sitemap.png"/>
                  </f:facet>
                  <h:commandLink  value="${lev2.desc}" rendered="true">
                    <f:setPropertyActionListener target="${treeModel.currentNodeObject}" 
                                                 value="${lev2}"/>

                  </h:commandLink>    
</rich:treeNode>

As you can see image icon for node and leaf (a node without children) are the same and are statically defined.
With this method is difficult to set a different image for different nodes, because facets “icon” and “iconLeaf” are set for all nodes inside collection defined by “nodes” attribute of rich:treeNodesAdaptor.

You can simply set a String attribute in “lev2″ object, called ,for example, imageUrl, at tree building time (Java side).

for (NodesModel node : lev1.getChildren()){
 if (node.type == 1)
    node.setImageUrl("/img/image1.png");
 else if (node.type == 2) 
    node.setImageUrl("/img/image2.png");
}

In this example i set a different image icon depending on node type.

Now i can use imageUrl property in richFaces:

<rich:treeNodesAdaptor id="level2" nodes="${level1.subDir}" var="lev2">
<rich:treeNode nodeSelectListener="${lev2.selectNode}" data="${lev2.desc}">
                  <f:facet name="icon">
                    <h:graphicImage value="${lev2.imageUrl}"/>
                  </f:facet>
                  <f:facet name="iconLeaf">
                    <h:graphicImage value="${lev2.imageUrl}"/>
                  </f:facet>
                  <h:commandLink  value="${lev2.desc}" rendered="true">
                    <f:setPropertyActionListener target="${treeModel.currentNodeObject}" 
                                                 value="${lev2}"/>

                  </h:commandLink>    
</rich:treeNode>


Viewing all articles
Browse latest Browse all 9

Trending Articles