代码之家  ›  专栏  ›  技术社区  ›  VestniK

如何隐藏Richfaces树中的一些节点(不按条件渲染节点)?

  •  0
  • VestniK  · 技术社区  · 16 年前

    我使用以下代码获得的最佳结果:

    <h:outputLabel for="showInactiveCheckbox" value="show all courses: "/>
    <h:selectBooleanCheckbox id="showInactiveCheckbox" value="#{categoryTreeEditorModel.showAllCoursesInTree}">
       <a4j:support event="onchange" reRender="categoryTree"/>
    </h:selectBooleanCheckbox>
    
    <rich:tree id="categoryTree" value="#{categoryTree}" var="item" switchType="ajax"
               ajaxSubmitSelection="true" reRender="categoryTree,controls"
               adviseNodeOpened="#{categoryTreeActions.adviseRootOpened}"
               nodeSelectListener="#{categoryTreeActions.processSelection}"
               nodeFace="#{item.typeName}">
    
       <rich:treeNode type="Category" icon="..." iconLeaf="...">
          <h:outputText value="#{item.title}"/>
       </rich:treeNode>
    
       <rich:treeNode type="Course" icon="..." iconLeaf="..."
                      rendered="#{item.courseActive or categoryTreeEditorModel.showAllCoursesInTree}">
          <h:outputText rendered="#{item.courseActive}" value="#{item.title}"/>
          <h:outputText rendered="#{not item.courseActive}" value="#{item.title}" style="color:#{a4jSkin.inactiveTextColor}"/>
       </rich:treeNode>
    
    </rich:tree>
    

    唯一的问题是如果某个节点没有列在任何rich:treeNode it 只是仍然显示由Object.toString()方法获得的标题,而不是隐藏。

    有人知道如何根据某些条件不显示Richfases树中的某些节点吗?

    更新

    为了更好地理解我要做的事情,我可以提供一个简单的例子:

    我想读取一次文件和目录,并将树存储在模型(org.richfaces.model.TreeNode)中,然后能够在一个页面上只显示目录,在另一个页面上只显示目录,默认情况下不显示隐藏的文件,并且可以使用此页面上的复选框显示所有文件和目录。

    没有足够的内容来渲染(/不渲染)rish:treeNode element 在facelet中,因为如果有一个节点在任何渲染rich:treeNode this 节点使用默认图标和标题呈现。人们可能会想到rich:treeNode like 关于只需添加的元素 自定义视觉样式 到某些类型的节点,但不作为负责呈现节点的元素。

    3 回复  |  直到 16 年前
        1
  •  0
  •   Alexandre Dupuis    16 年前

    我真的不确定,但也许你可以尝试使用Facelets。由于c:if是一个构建时标记,EL的计算结果是否正确?

    请参见: http://wiki.java.net/bin/view/Projects/FaceletsFAQ#Why_doesn_t_my_c_if_ui_repeat_ui

        2
  •  0
  •   Shervin Asgari    16 年前

    <s:fragment> ?

    <s:fragment rendered="#{item.flag == 'true'}">
        Show some stuff here when flag returns true
    </s:fragment>
    
    <s:fragment rendered="#{not item.flag}">
        Show some stuff here when flag is NOT true
    </s:fragment>
    

    更新

    我不知道你的问题到底是什么,但我猜你想隐藏一个树节点

    <s:fragment rendered="#{item.courseActive}">
       <rich:treeNode type="Category" icon="..." iconLeaf="...">
          <h:outputText value="#{item.title}"/>
       </rich:treeNode>
    </s:fragment>
    
    <s:fragment rendered="#{not item.courseActive}">
      <rich:treeNode type="Course" icon="..." iconLeaf="...">
         <h:outputText value="#{item.title}"/>
      </rich:treeNode>
    </s:fragment>
    
        3
  •  0
  •   VestniK    16 年前

    看来有两种方法可以解决我的问题。

    我可以用rich:recursiveTreeNodesAdaptor and 在递归getter函数中,我可以跳过一些节点。此方法可能很难使用拖放来移动树中的项目。

    第二个:

    我想我会使用第二种方法,因为我需要拖放树编辑器。

    一年前,JBoss comunity论坛也讨论过同样的问题: http://community.jboss.org/message/64929 第二种方法也被建议

    推荐文章