繁体   English   中英

富面临树问题

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM