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-
- 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
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);
}
}
- 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
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;
}
}
- Now code part is complete, now configure your treeTable to show data, see XML source of af:treeTable
<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>
- Now run your application and check , what you have done ;)
Happy Learning :)
Sample ADF Application (12.1.3)