2011-02-13 2 views
5

, 당신은라는 이름의 특별한 태그를 가지고있다. 구성 요소에 자식이 있는지 여부를 알 수있는 방법이 있습니까? 부울 값처럼 "렌더링 된"속성을 사용할 수 있습니다.JSF2에서 복합 컴포넌트에 자식이 있는지 확인하는 방법은 무엇입니까? 이 모든 컴퍼넌트의 아이를 삽입</p> <pre><code><composite:insertChildren /> </code></pre> <p>: 나는 복합 구성 요소를 쓰고 있어요

#{cc.childCount} 이상의 정교 :

#{component.getCompositeComponentParent(component).childCount}

일예로

답변

7

후 당신의 기본 표현은 다음과 같다 다음과 같은 복합 성분 : 다음 Facelet에 사용

<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> 

는 :

<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}은 합성 구성 요소에 하위 요소가 있는지 여부를 알려줍니다.

+1

복합 구현에서''을 사용하지 않으면'cc.childCount'만이 올바른 대답을줍니다. – squallsv

+0

이것은 본질적으로 질문에 답하지 않습니다. @squallsv가 지적한대로 '의 수를 원했기 때문에이 태그를 사용할 때 계산을 얻는 방법은 wentwog, Brian Leatham 또는 저의 의견을 참조하십시오. –

+0

@JohnYeary 네 말이 맞아. 그 답을 제출해 주신 모든 분들께 감사드립니다. 질문은 기술적으로 약간 야심적이지만 ("구성 요소의 하위"에 대해 질문 함) 실제로 ''에 의해 삽입 된 자식이 의미가 있다는 것은 더 논리적입니다. –

2

Mojarra는 적어도 작동하지 않습니다. 복합 컴포넌트의 자식은 올바르게 삽입되지만 #{cc.parent} 또는 #{cc.children}에 액세스하는 것은 2.0.2에서 작동하지 않으며 #{cc.childCount}은 자식의 수와 관계없이 항상 2.0.4에서 0을 반환합니다.

+0

# {component.getCompositeComponentParent (component) .childCount}이 (가) 나를 위해 일했습니다. 너 그거 해봤 니? – arg20

6

동일한 문제가 발생하여 'javax.faces.component.COMPOSITE_FACET_NAME'패싯 내에 복합 컴포넌트의 하위 항목을 찾을 수있었습니다.

자바에서는이 같은거야 :

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

는 희망이 도움이 : JSF에서

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

이 같은 일을합니다.

+1

니스 찾기! Grey fix, but nice it found;) 나에게 맞는 구문은 다음과 같다 :'# {cc.getFacets(). get ('javax.faces.component.COMPOSITE_FACET_NAME'). children}' –

+0

우리가 찾고 있기 때문에 그러나 count에 대해서는 size()를 추가하여 약간 수정해야했습니다. '# {cc.getFacets(). get ('javax.faces.component.COMPOSITE_FACET_NAME'). children.size()}' –

관련 문제