2014-01-20 2 views
0

내 프로젝트에서 JSF 2.0을 사용하고 있습니다. 나는 그 구현에 당혹 스럽다. 현재 데이터 테이블/트리 테이블에 대한 복합 구성 요소를 구현 중입니다. 나는 datatable과 treetable을위한 일반적인 컴포넌트를 생성하고있다. 이 복합 컴포넌트를 사용하는 사용자는 트리 테이블 또는 데이터 테이블의 데이터를 표시하기 위해 부울 값을 전달해야합니다. 나는 데이터 테이블이 필요한 경우JSF El 컴파일 타임에 실행

<cc:attribute name="treeMode" default="false" type="java.lang.Boolean"/> 

<p:dataTable rendered="#{cc.attrs.treeMode == 'false'} id="#{cc.attrs.id} value=".../> 
<p:treeTable rendered="#{cc.attrs.treeMode == 'true'}" id="#{cc.attrs.id} value=".../> 

, 나는 나 또한 ID 속성을 전달하고

<nav:navDataGrid 
    id="testTable" 
    treeMode="true" 
    databean="testBean" .../> 

를 사용합니다. 하지만 내 문제는 위의 코드를 사용하여 복합 컴포넌트를 사용할 때이다.

Component ID testTable:testTable has already been found in the view. 

데이터 테이블과 트리 테이블을 모두 렌더링하기 때문에 생각한다. treeMode = tree를 전달하면 왜 datatable이 렌더링됩니까? 이 문제를 어떻게 해결할 수 있습니까? TreeTable에 대해 하나 이상의 복합 컴포넌트를 만드는 다른 옵션이 있습니까?

답변

1

JSF에서는 구성 요소 모델이 응답이 준비되고 렌더링되기 전에 수명주기의 여러 단계로 작성된다는 것을 기억하십시오. 따라서 두 구성 요소가 동시에 렌더링되지 않을지라도 서로 다른 ID가 필요합니다.

+0

실제로. "보기 빌드 시간"대 "보기 렌더링 시간"에 대한 관련 읽기 : http://stackoverflow.com/a/3343681 및 http://stackoverflow.com/a/14917453 – BalusC