Trinidad/TreeTable and how to determine selected rows
chane Oct 12, 2007 12:23 AMI am using the Trinidad TreeTable component. We present the component and the user can select a number of rows. When an commandButton is selected, we are trying to figure out a good way to get the selected rows in our method call.
Here's what we have:
Facelets fragment
<tr:form id="frm"> <tr:messages/> <tr:panelHorizontalLayout> <f:facet name="separator"><tr:spacer width="8px"/></f:facet> <tr:panelHeader text="Courses"> <tr:panelButtonBar> <tr:commandButton text="Save" action="#{lister.save}" id="btn_save"/> </tr:panelButtonBar> </tr:panelHeader> </tr:panelHorizontalLayout> <tr:treeTable var="foo" value="#{lister.tree}" rowSelection="multiple" selectionListener="#{lister.selectionBindingMethod}"> <f:facet name="nodeStamp"> <tr:column> <f:facet name="header"> <tr:outputText value="Name"/> </f:facet> <tr:outputFormatted value="#{foo.name} : #{foo.type} : #{foo.id}"/> </tr:column> </f:facet> </tr:treeTable> </tr:form>
And the Seam component is:
@Name("lister") @Stateful @LoggedIn public class CourseLister implements ICourseLister { TransferObject root; private TreeModel tree; public String save(){ System.out.println("SAVE DONE>>>>"); return null; } public String showCourses(){ //<snip creation of a transfer object that contains the tree/> //convert the root object into a Trinidad TreeModel tree = new ChildPropertyTreeModel(root, "children"); return "viewList"; } public void selectionBindingMethod(SelectionEvent event){ System.out.println("selectionBindingMethod["+event+"]"); UIXCollection table = (UIXCollection)event.getSource(); for(Iterator<Object> i = ((UIXTree)table).getSelectedRowKeys().iterator(); i.hasNext(); ){ Object n = i.next(); AppUtils.LOG.fatal("KEYSET ITERATION["+n+"] class["+n.getClass().getName()+"]"); table.setRowKey(n); TransferObject to = (TransferObject)table.getRowData(); } } public TreeModel getTree(){ AppUtils.LOG.fatal("GET TREE............"); return tree; } }
Since we can not bind the tree component to the class (this is a conversation scoped bean), we are using the selectionListener.
However, the listener is not getting called until *after* the commandButton lister.save action is called (that is the button that is pressed). Therefore, I don't have the information in the save method about what rows are selected.
Thoughts on other approaches to try?
Seam 1.2.p1
MyFaces
jboss 4.0.4
Thanks,
Chris....