В моем приложении SEAM есть дерево категорий и курсов. Курсы могут быть активными и неактивными. Я хочу, чтобы в моем дереве отображались только активные или все курсы.
Я решил всегда строить полное дерево в своем компоненте области PAGE, так как создание этого дерева - довольно дорогая операция. У меня есть логический флаг courseActive в данных, обернутых TreeNode . Теперь я не могу найти способ показать узел курсов, только если этот флаг имеет значение true.
Лучший результат, который я достиг с помощью следующего кода:
<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 он все еще отображается с заголовком, полученным методом Object.toString (), за исключением того, что он скрыт.
Кто-нибудь знает, как не показывать некоторые узлы в дереве Richfases согласно некоторому условию?
Обновление
Для лучшего понимания того, что я пытаюсь сделать, приведу простой пример:
Представьте, что у меня есть файловая система с файлами и каталогами, и есть нормальные и скрытые файлы (в моем случае у меня нет скрытых каталогов, но это не важно).
Я хочу один раз прочитать файлы и каталоги и сохранить дерево в модели (org.richfaces.model.TreeNode), а затем иметь возможность показывать только каталоги на одной странице и только каталоги, а не скрытые файлы по умолчанию на другой странице. с возможностью показа всех файлов и каталогов с помощью флажка на этой странице.
Недостаточно хедировать (/ не отображать) элемент rish: treeNode в facelet, поскольку, если есть узел, который не упоминается ни в одном из визуализированных rich: treeNode, этот узел отображается с использованием значков и заголовка по умолчанию. Можно подумать о rich: treeNode, как об элементе, добавляет только пользовательский визуальный стиль к узлам некоторых типов, но не как элемент, отвечающий за рендеринг узла.