Hi guys.
I found strange thing trying to implement selection handling in my tree bean.
Here is my own implementation of TreeNode interface:
public class USSDTreeNode implements TreeNode { private static final long serialVersionUID = -3498990493803705085L; private Object data; private TreeNode parent; private Map childrenMap = new LinkedHashMap(); .... }
<rich:tree styleClass="menuStructure" value="#{ussdMenuTree.data}" var="item" switchType="server" dragIndicator="treeIndicator" binding="#{ussdMenuTree.tree}" nodeSelectListener="#{ussdMenuTree.processSelection}" ajaxSubmitSelection="true"> <rich:treeNode type="ussdNode"> <h:outputText value="#{item.name}"/> </rich:treeNode> </rich:tree>
@Scope(ScopeType.SESSION) @Name("ussdMenuTree") public class USSDMenuTree implements NodeSelectedListener { @Logger private Log log; private USSDTreeStructureBuilder builder; private UITree tree; private USSDTreeNode selectedNode; private USSDTreeNode root; public USSDMenuTree() { builder = new USSDTreeStructureBuilder(); reset(); } public void processSelection(NodeSelectedEvent event) throws AbortProcessingException { log.info("Node selected: " + getTree(event).getRowKey()); TreeNode treeNode = getTree(event).getTreeNode(); log.info("Selected: " + treeNode + ", class: " + treeNode.getClass() + ", data: " + treeNode.getData() + ", dataClass: " + treeNode.getData().getClass()); } ...