Hi,
I created a rich tree with changeExpandListener. it runs only at root level of my tree and does not apply to children that are being added by the listener dynamically .
what should I do ?
here is my code
<rich:tree id="programTree"
ajaxKeys="#{_item.id}"
switchType="ajax"
value="#{programTreeList.treeNode}" var="_item">
<rich:changeExpandListener type="com.test.ui.TreeNodeXpander"/>
<rich:treeNode >
<h:outputText value="#{_item.programName}" />
</rich:treeNode>
</rich:tree>
public class TreeNodeXpander implements NodeExpandedListener
{
@Override
public void processExpansion(NodeExpandedEvent nodeExpandedEvent) throws AbortProcessingException
{
Object source = nodeExpandedEvent.getSource();
if (source instanceof HtmlTree)
{
HtmlTree tree = (HtmlTree) source;
Object rowKey = tree.getRowKey();
TreeNode modelTreeNode = tree.getModelTreeNode(rowKey);
Program rowData = (Program) tree.getRowData(rowKey);
List<Program> list = fetchChildren(rowData, modelTreeNode);
if (CollectionUtil.isNotEmpty(list))
{
for (Program program : list)
{
TreeNodeImpl<Program> tp = new TreeNodeImpl<Program>();
tp.setData(program);
modelTreeNode.addChild(program.getId(), tp);//won't expand
}
}
}
}
PS : I am trying to create a partial(lazy) loading tree.