[英]Rich faces tree problem
請考慮以下富臉樹例子:
<rich:tree switchType="ajax">
<rich:treeNodesAdaptor id="officeNodeAdaptor" nodes="#{officesBean.offices}" var="office" >
<rich:treeNode changeExpandListener="#{office.loadEmplyeesIfNeeded}" >
<h:outputText value="#{office.name}" />
</rich:treeNode>
<rich:treeNodesAdaptor id="employeeNodeAdaptor" nodes="#{office.employees}" var="employee">
<rich:treeNode>
<h:outputText value="#{employee.name}" />
</rich:treeNode>
</rich:treeNodesAdaptor>
這是用於表示“辦公室 - >員工”數據結構的示例樹。 我希望以懶惰方式加載emplyees - 所以我介紹了loadEmplyeesIfNeeded擴展監聽器。 除了一件事,一切都很好。 辦公室節點擴展后,員工將被加載。因此,當樹被渲染時,所有辦公室都沒有任何員工並且被渲染為葉子..當然,葉子無法擴展....
使長店短。 有沒有辦法設置節點應該呈現為節點(有可能擴展),盡管沒有孩子? 最好的是如果富有:treeNode會有一些像isNode那樣的屬性,但它不會...
順便說一下,我可以通過在辦公室初始化時向每個辦公室添加一名假員工來解決這個問題。但這不是很好的工作......
在此先感謝您的幫助。
有點晚了但是。 誰知道。
您可以像我一樣擴展org.richfaces.model.TreeNodeImpl。
public class RichTreeNodeImpl extends org.richfaces.model.TreeNodeImpl {
private boolean treatAsNode;
public boolean getTreatAsNode() {
return treatAsNode;
}
public void setTreatAsNode(boolean treatAsNode) {
this.treatAsNode = treatAsNode;
}
@Override
public boolean isLeaf() {
if (this.treatAsNode)
return false;
else
return super.isLeaf();
}
}
如果您不介意在應用程序中添加其他庫,則可以使用OpenFaces TreeTable執行此操作。 只需將preloadedNodes =“none”(或prelodedNodes =“levelsPreloaded:1”)添加到<o:treeTable>
標記即可實現延遲加載,它還將自動檢測是否應顯示節點的擴展切換。 OpenFaces TreeTable是可以自定義的,它不一定看起來像一個多列表,但它也可以顯示為一個簡單的樹(例如,見本頁 )
以下是如何聲明這樣的TreeTable(您可能實際上需要更多自定義,但此示例顯示了這個想法):
<o:treeTable var="node" preloadedNodes="none">
<o:dynamicTreStructure nodeChildren="#{treeTableBean.nodeChildren}"/>
<o:treeColumn>
<h:outputText value="node.name"/>
</o:treeColumn>
</o:treeTable>
treeTableBean.nodeChildren方法應該取“node”變量的值,並返回其子節點(如果其值為null,則返回根節點)。 以下是此方法在您的情況下的外觀:
public List getNodeChildren() {
Object node = Faces.var("node");
if (node == null)
return getOffices();
else
return ((Office) node).getEmployees();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.