Hello All
This post is about creating & populating af:treeTable programmatically in ADF 11g and 12c
treeTable is basically a hierarchical representation of data, using ADF model layer we can create treeTable very easily by defining master-detail relation between viewObjects
see my previous posts on treeTable-
Tree Table Component in Oracle ADF(Hierarchical Representation)
Tree Table Component with declarative presentation in ADF, Access childs without custom selection listener
Expand and Collapse an af:treeTable programmatically in ADF Faces (Oracle ADF)
Refreshing Child Nodes of an af:treeTable / af:tree in Oracle ADF
to populate treeTable programmatically we need to configure data set that fits to tree hierarchy
thanks to Chris Muir's post about programmatic creation of treeTable
http://one-size-doesnt-fit-all.blogspot.in/2007/05/back-to-programming-programmatic-adf.html
there is 4-5 simple steps to do-
This post is about creating & populating af:treeTable programmatically in ADF 11g and 12c
treeTable is basically a hierarchical representation of data, using ADF model layer we can create treeTable very easily by defining master-detail relation between viewObjects
see my previous posts on treeTable-
Tree Table Component in Oracle ADF(Hierarchical Representation)
Tree Table Component with declarative presentation in ADF, Access childs without custom selection listener
Expand and Collapse an af:treeTable programmatically in ADF Faces (Oracle ADF)
Refreshing Child Nodes of an af:treeTable / af:tree in Oracle ADF
to populate treeTable programmatically we need to configure data set that fits to tree hierarchy
thanks to Chris Muir's post about programmatic creation of treeTable
http://one-size-doesnt-fit-all.blogspot.in/2007/05/back-to-programming-programmatic-adf.html
there is 4-5 simple steps to do-
- Create a fusion web application and drop a af:treeTable on page , in treeTable creation wizard select "bind later"
- now create managed bean to populate data in treeTable, create a simple List in managed bean of type POJO class (a java class that contains attributes and their accessor )
- so in this app i am going to Tv Serial and respective character names in treeTable, for that i have created a class that contains POJO for treeTable
- In this class the characters list behaves as child of seasons, so in managed bean define a top-level list (that contains both master and detail) and add values
- Now code part is complete, now configure your treeTable to show data, see XML source of af:treeTable
- Now run your application and check , what you have done ;)
import java.util.ArrayList; import java.util.List; public class Seasons { public Seasons(String name) { this.name = name; // To Store Header Values (Storing Seasons Name :)) characters = new ArrayList<Seasons>(); // To Store Detail Values (Storing Season's Charatcers) } public void setCharacters(List<Seasons> empDet) { this.characters = empDet; } public List<Seasons> getCharacters() { return characters; } private String name; private List<Seasons> characters; public void setName(String name) { this.name = name; } public String getName() { return name; } // This methods directly add characters value in list public void addEmp(Seasons employee) { characters.add(employee); } }
See managed Bean Code-
import java.util.ArrayList; import java.util.List; import org.apache.myfaces.trinidad.model.ChildPropertyTreeModel; public class ProgrammaticTreeTabBean { List<Seasons> seasonList = new ArrayList<Seasons>(); ChildPropertyTreeModel charatcerVal; public ProgrammaticTreeTabBean() { super(); // Creating tree for Seasons and Characters details // Adding Master Values (seasons) Seasons season1 = new Seasons("Game of Thrones"); // Adding Detail Values (Child Node-Characters) Seasons character = new Seasons("Tywin Lannister"); season1.addCharaters(character); character = new Seasons("Tyrion Lannister"); season1.addCharaters(character); character = new Seasons("Jaime Lannister"); season1.addCharaters(character); character = new Seasons("Cersie Lannister"); season1.addCharaters(character); character = new Seasons("Ned Stark"); season1.addCharaters(character); // Adding Master Values (seasons) Seasons season2 = new Seasons("Arrow"); // Adding Detail Values (Child Node-Characters) character = new Seasons("Oliver Queen"); season2.addCharaters(character); character = new Seasons("Moira Queen"); season2.addCharaters(character); character = new Seasons("Laurel Lance"); season2.addCharaters(character); character = new Seasons("Sara Lance"); season2.addCharaters(character); // Adding Master Values (seasons) Seasons season3 = new Seasons("Vikings"); // Adding Detail Values (Child Node-Characters) character = new Seasons("Ragnar Lothrak"); season3.addCharaters(character); // Adding all list to topList seasonList.add(season1); seasonList.add(season2); seasonList.add(season3); // Filtering Child Data, ChildPropertyTreeModel creates a TreeModel from a List of beans, see // https://myfaces.apache.org/trinidad/trinidad-api/apidocs/org/apache/myfaces/trinidad/model/ChildPropertyTreeModel.html charatcerVal = new ChildPropertyTreeModel(seasonList, "characters"); } public ChildPropertyTreeModel getCharatcerVal() { return charatcerVal; } }
<af:treeTable rowBandingInterval="0" id="tt1" value="#{pageFlowScope.ProgrammaticTreeTabBean.charatcerVal}" var="node" rowSelection="single" initiallyExpanded="true"> <f:facet name="nodeStamp"> <af:column headerText="Node Stamp" id="c1" width="250"> <af:outputText value="#{node.name}" id="ot1" inlineStyle="font-weight:bold;"/> </af:column> </f:facet> </af:treeTable>
Hi Ashish,
ReplyDeleteThanks for Your grate Posts from ur blog its not blog its a place i learn alot
based on this blog I populated TreeTable
in my case am populated using Files Class in Java with Folders
how to add child to chaild Items
and can U please tell me when am adding chailds the same chailds adding to every node
Thanks and regards
Raja
DeleteCheck Add and delete records (Parent/Child) in POJO Based ADF TreeTable
This post is about adding child and parent nodes in POJO based tree
I hope it'll help you
Ashish
Hi Ashish Thanks for your reply,
Deleteyour suggestion is Good but i don't want that type. as My view now we have some chailds(cherecters)we need to add sub chaild
Root
|-chaild
|-sub chaild
I did same like Ur code and am adding values from Lists
in MyCode am using folders and subfolders and so on..... according to directory. I loaded all values to map key as root and Chaild as value now we need to add sub chailds
Please Help me to do that
for more Clarity see here
https://community.oracle.com/thread/3943210?sr=inbox&ru=961050
Thanks in Advance Your help is really precious to me
As per above example if you want to add sub child then
Deletewrite like this -
// Adding Master Values (seasons)
Seasons season4 = new Seasons("Test Data");
// Adding Detail Values (Child Node-Characters)
character = new Seasons("Test Child");
season4.addCharaters(character);
//Add this as child of first Record
season1.addCharaters(season4);
Ashish
Ashish, I need pragmatical Logic Help me here its grate help if U did something and as per your example we cant Imzine root and chaild but your example giving one path to every one without your example there is no other ideas. Please help me
ReplyDeleteThanks AShish for your valuable example
This comment has been removed by the author.
ReplyDeleteSorry ashish my code example am posting here but it was not visible here what can i do
ReplyDeleteYou have to call addCharacter method for every child level , Now you have to check if a directory has child directory then you have to call this method to add sub child
DeleteI can't make a sample this time , you have to try it yourself
Ashish
Hi Ashish Thanks for this
ReplyDeleteNow i got Tree according to my directory but now i have a problem on selection of those i Completely used your code for selection event
Now the problem is
Root
\- chaild (Selection working)
\-\-sub chaild(Selection not working) :-(
Raja Sekhar
DeleteYou can traverse treeTable to get all nodes and to get specific node value in multi level tree you can use f:attribute tag in treeTable and on button click get that attribute value
< f:attribute name="nodeName" value="#{node.name}" / >
and to get it's value in bean actionEvent.getComponent().getAttributes().get("nodeName")
Ashish
sorry Ashish to disturbing U again and again i tried it, it was throwing null pointer Exception
ReplyDeleteObject obj = selectionEvent.getComponent().getAttributes().get("nodeName");
System.out.println("Selected Obj " + obj.toString());
Don't use f:attribute on selectionListener , drop a button or link in a column of treeTable and then drop f:attribute under it , Like this
Delete< af:column id="c2" width="30" align="center" >
< af:link id="l1" text="Get Selected Record"
actionListener="#{viewScope.ProgrammaticTreeTabBean.SelectedRecordAction}" >
< f:attribute name="nodeName" value="#{node.name}"/ >
< / af:link >
< / af:column >
Ashish
Perfect Solution Ashish. Thanks for awesome support
Deletenow i have doubt why selection listener not supporting in this event Now if we choose one node(Link) its Refreshing means just flipping whole tree i dont want this again and again.
any have Ur support is awesome
Regards
Raj
Try setting contentDelivery property to immediate
DeleteAshish
Hi Ashish
ReplyDeleteAs of our previous discussion we Implemented (n) nodes & child tree with POJO
Now i have a one question i searched and tried so many ways but not success any way
can we Implement Bread Crumbs Navigation with that tree. is that's possible with our implementation.
Thanks
Raj
Great tutorial.
ReplyDeleteHi Ashish,Could you please help me,
ReplyDeletei am beginner to Oracle ADF, Could you tell me how to bind View Objects to ADF Swing Tree Component Programmatically with any simple Single table based View Object as example.
Thank you in Advance
Giridhar
Girdhar
DeleteI don't have any examples on ADF Swing , You can learn same using ADF Faces
Ashish