richfaces, как избежать отображения значка rich tree? - PullRequest
3 голосов
/ 03 июля 2011

richfaces, как не отображать иконку rich tree?Я хочу отфильтровать дерево, где, если один отец заполнен, он не будет показан, но его дети будут показаны, поэтому мне нужно сменить значок с дефолта на значок без значка.

<rich:treeNode type="regularNode"
                icon="#{item.toShow?item.icon:'null'}" rendered="#{item.toShow}">

, где элемент представляет узел дерева

1 Ответ

0 голосов
/ 27 ноября 2012
Компоненты

<rich:tree и <rich:treeNode> наконец становятся связкой узлов table, tr и td на странице HTML.Взглянув на справочный документ * из <rich:treeNode>, вы можете обнаружить, что предопределенное имя класса стиля для значка <rich:treeNode> компонента rich-tree-node-icon.Да, это класс стилей, который вы должны перезаписать, чтобы изменить стиль иконки.Однако в вашем случае вам не нужно скрывать значки всех <rich:treeNode> s.Так что что-то хитрое должно быть сделано.Это всего лишь один трюк, который вы можете сделать.

Вы знаете, что вы можете указать значок узла дерева, используя EL, подобный этому.Поэтому сначала сделайте это.

<rich:treeNode icon="#{myNode.nodeIcon}"

, где myNode представляет treeNode, а метод getNodeIcon() возвращает путь к изображению.Для treeNode, которые вам нужны, чтобы их значки были скрыты, этот метод должен возвращать пустую строку.Хорошо, теперь поместите это javascript после тега закрытия </rich:tree>.

<script>
    var imgs = document.getElementsByTagName('img');
    for(var i = 0; i &lt; imgs.length; i++) {
        var iconFound = imgs[i].parentNode.getAttribute('class').indexOf('rich-tree-node-icon') >= 0;
        var imgSrc = imgs[i].getAttribute('src');
        if(iconFound &amp;&amp; (imgSrc == '')) {
            imgs[i].style.display = 'none';
        }
    }
</script>

Вот и все.Примечание: что делает этот скрипт?Он находит <img> s, где класс стиля их родителя содержит rich-tree-node-icon class.Затем скройте эти теги <img>, если src пусто.

...