tree2
actionListener(jsp側)とList children = event.getComponent().getChildren();(Bean側:ActionEvent)の連携部分、
http://myfaces.apache.org/tomahawk/apidocs/org/apache/myfaces/custom/tree2/TreeNodeBase.html
非常にカンタンにしか書かれていないけどドキュメント。
Constructor Summary
TreeNodeBase(java.lang.String type, java.lang.String description, java.lang.String identifier, boolean leaf)
つーのが重要でdescriptionとidentifier(こっち省略可)が渡されていたわけですね…。
String型のみでオブジェクト不可なあたりもなんとかならんものか。
以下ソース抜粋。
.jsp <t:tree2 id="clientTree" showRootNode="false" value="#{communityBean.treeData}" var="node" varNodeToggler="t" > <f:facet name="KK"> <h:panelGroup> <f:facet name="expand"> <t:graphicImage value="images/yellow-folder-open.png" rendered="#{t.nodeExpanded}" border="0" /> </f:facet> <f:facet name="collapse"> <t:graphicImage value="images/yellow-folder-closed.png" rendered="#{!t.nodeExpanded}" border="0" /> </f:facet> <h:outputText value="#{node.description}" styleClass="nodeFolder" /> <h:outputText value=" (#{node.childCount})" styleClass="childCount" /> </h:panelGroup> </f:facet> <f:facet name="section"> <h:panelGroup> <f:facet name="expand"> <t:graphicImage value="images/yellow-folder-open.png" rendered="#{t.nodeExpanded}" border="0" /> </f:facet> <f:facet name="collapse"> <t:graphicImage value="images/yellow-folder-closed.png" rendered="#{!t.nodeExpanded}" border="0" /> </f:facet> <h:outputText value="#{node.description}" styleClass="nodeFolder" /> <h:outputText value=" (#{node.childCount})" styleClass="childCount" /> </h:panelGroup> </f:facet> <f:facet name="person"> <h:panelGroup> <h:commandLink immediate="true" actionListener="#{topBean.getUserAndEntryByTreeUserId}" action="return"> <f:param name="userName" value="#{node.identifier}"></f:param> <h:graphicImage style="border: 0px" value="/images/document.png" /> <h:outputText value="#{node.description}" /> </h:commandLink> </h:panelGroup> </f:facet> </t:tree2>
communityBean.treeDataでは表示用のdescriptionとは別にIDをidentifierに仕込んでます。
いったんStringにしてますが。
TopBean.java public void getUserAndEntryByTreeUserId(ActionEvent event) { List children = event.getComponent().getChildren(); String stringUserId = null ; for (Iterator iter = children.iterator(); iter.hasNext();) { Object next = iter.next(); if (next instanceof UIParameter) { UIParameter param = (UIParameter) next; stringUserId = (String)param.getValue(); } } int id = Integer.parseInt(stringUserId); ent = entries.getEntriesByUserId(id); }
まだvarNodeTogglerの意味やactionListenerとactionの使い分けなんぞ理解しきれてません。