В JSF2, как узнать, есть ли у составного компонента дочерние элементы? - PullRequest
5 голосов
/ 13 февраля 2011

Я пишу составной компонент, у вас есть специальный тег с именем:

<composite:insertChildren />

Который вставляет туда все дочерние элементы компонента. Есть ли способ узнать, есть ли у компонента дочерние элементы? Как и логическое значение, которое может указывать на «визуализированный» атрибут.

Ответы [ 3 ]

7 голосов
/ 13 февраля 2011

Основное выражение, которое вам нужно, выглядит следующим образом:

#{cc.childCount} или более подробно:

#{component.getCompositeComponentParent(component).childCount}

Например, следующий составной компонент:

<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:h="http://java.sun.com/jsf/html"  
    xmlns:cc="http://java.sun.com/jsf/composite"
>
    <cc:interface/>

    <cc:implementation>             
        <h:outputText value="Children: #{cc.childCount}" />
    </cc:implementation>    
</html>

используется на следующем Facelet:

<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:h="http://java.sun.com/jsf/html"    
    xmlns:test="http://java.sun.com/jsf/composite/test"    
>

    <h:body>

        <test:myCom>
            <h:outputText value="first child" />
            <h:outputText value="second child" />
        </test:myCom>

    </h:body>
</html>

напечатает Children: 2.

Таким образом, #{cc.childCount != 0} скажет вам, есть ли у составного компонента дочерние элементы или нет.

6 голосов
/ 03 июня 2011

Я столкнулся с той же проблемой и смог найти потомков составного компонента в его фасете 'javax.faces.component.COMPOSITE_FACET_NAME'.

В Java это так:

// we are within some method of UIComponent
UIComponent childrenHolderFacet = getFacets().get("javax.faces.component.COMPOSITE_FACET_NAME");
Iterator<UIComponent> childrenIt = childrenHolderFacet.getChildren().iterator();
...

В JSF это что-то вроде:

#{component.getFacets().get("javax.faces.component.COMPOSITE_FACET_NAME").children}

Надеюсь, это поможет.

2 голосов
/ 01 марта 2011

По крайней мере, на Мохарре это не работает.Дочерние составного компонента вставляются просто отлично, но доступ к #{cc.parent} или #{cc.children} не работает на 2.0.2, а #{cc.childCount} всегда возвращает 0 на 2.0.4, независимо от количества дочерних элементов.

...