RichTree - Am I Using It Right
leesy Jun 17, 2008 12:27 PMHi all,
I'm having a bit of a problem with my RichTree and I was wondering if someone can give what I have a quick once over to see if I'm doing things right. I'll post the code first so that the example makes more sense.
Seam page (well the part of it!)
<h:form id="typeForm"
rendered="#{not empty typeHome.selectedTypeList.id}">
<p>Selected Type = #{typeHome.selectedType}</p>
<div><h:inputText value="#{typeListHome.example.value}" /> <h:commandButton
action="#{typeListHome.update()}" value="Update" /></div>
<div id="typeselector" class="clear">
<rich:tree
value="#{typeHome.selectedTypeList.asTreeNode}" var="item" showConnectingLines="false">
<rich:treeNode selectedClass="selected">
<h:outputText value="#{item.value}" />
<a:support event="onclick" action="#{typeHome.select(item)}" reRender="typeForm" />
</rich:treeNode>
</rich:tree>
<ul>
<li><h:commandLink action="#{typeHome.moveFirst()}" styleClass="actionlink movefirst"
immediate="true">
First
</h:commandLink></li>
<li><h:commandLink action="#{typeHome.moveUp()}" styleClass="actionlink moveup"
immediate="true">
Up
</h:commandLink></li>
<li><h:commandLink action="#{typeHome.moveDown()}" styleClass="actionlink movedown"
immediate="true">
Down
</h:commandLink></li>
<li><h:commandLink action="#{typeHome.moveLast()}" styleClass="actionlink movelast"
immediate="true">
Last
</h:commandLink></li>
<li><h:commandLink styleClass="actionlink delete" action="#{typeHome.remove()}">
<a:support event="onclick"
onsubmit="return showDeleteConfirmation('type #{selectedType.value}')" />
Delete
</h:commandLink></li>
<li><h:commandLink value="New" styleClass="actionlink add"
action="#{typeHome.clearInstance()}" /></li>
</ul></div>Functions that create my tree node:
class TypeList {
// Stuff omitted...
public TreeNode getAsTreeNode() {
TreeNode rootNode = new TreeNodeImpl();
rootNode.setData(this);
rootNode = addTreeNodeChildren(rootNode, getChildren());
return rootNode;
}
public TreeNode addTreeNodeChildren(TreeNode parentNode, List<Type> children) {
for (Type child : children) {
TreeNode childNode = new TreeNodeImpl();
childNode.setData(child);
childNode.setParent(parentNode);
if (child.getChildren() != null && child.getChildren().size() > 0) {
childNode = addTreeNodeChildren(childNode, child.getChildren());
}
parentNode.addChild(child.getValue(), childNode);
}
return parentNode;
}
}TypeHome also has two properties on the conversation scope - selectedTypeList and selectedType.
Anyway, onto the problem... When I create a new type, I assign it to selectedType. I can then use the up, down and other move buttons to move that type around in it's typelist. I also want to have it so that when you click on a type in the richtree, that item is copied to selectedType. This is happening via the Ajax4J support tag in the treenode. Trouble is, when I come to click on the move buttons - nothing happens. No errors or anything like that. The action method is never invoked after I select the item from the richtree.
So can anyone see anything obviously wrong about how I am using the RichTree as for now I'm assuming that the way I select the items is somehow causing a problem (although it appears to select exactly the right thing).
Cheers for any help,
Lee