2011-12-02 3 views
1
  <ui:repeat value="#{bean.allResults}" var="result"> 
       <ui:fragment rendered="#{result.condition1}"> 
        <ui:include src="/item1.xhtml"> 
       </ui:fragment> 
       <ui:fragment rendered="#{result.condition2}"> 
        <ui:include src="/item2.xhtml"> 
       </ui:fragment> 
       <ui:fragment rendered="#{result.condition3}"> 
        <ui:include src="/item3.xhtml"> 
       </ui:fragment> 
       <ui:fragment rendered="#{result.condition4}"> 
        <ui:include src="/item4.xhtml"> 
       </ui:fragment> 
      </ui:repeat> 

나는 위의 코드처럼 보이는 JSF 페이지가 JSF/JSTL/Facelets의
를 사용할 때 최상의 방법에 대한 몇 가지 질문이 있습니다. 이 루프가 10 개의 결과를 반환한다고 가정하고 각 결과에 대해 하나의 조건 evalutate를 true로 가정합시다. 그래서 사용자는 HTML 페이지가로드되면 10 개의 결과를 볼 수 있습니다.JSF/Facelets의/JSTL 조건 표시 모범 사례

  1. 그겁니다 만 10 항목이 false로 평가 렌더링 된 곳들을 포함 할 구성 요소 트리 (40 개) 항목을 포함 할 HTML을에 표시됩니다. 위에서 설명한 동작이 정확합니까?

  2. 1이 맞으면 구성 요소 트리에 숨겨진 구성 요소가 많이있을 수 있습니다. 성능 문제는 40 개가 아니라 40 개라고 가정 해 봅시다.

  3. Facelet 또는 JSF에는 c : if처럼 작동하고 트리에 구성 요소가 포함되지 않는 조건부 태그 처리기가 있습니까? 또는 최후의 수단으로 c : if를 사용해야합니까? JSTL 사용을 피하려고합니다.

감사합니다.

답변

3

그겁니다 10 항목은 구성 요소 트리 (40 개) 항목

당신은 포함 된 구성 요소가 렌더링 된 경우에도 구성 요소 트리의 일부가 될 것 올바른지 거짓을 포함에 HTML을 표시합니다. 그러나 <ui:repeat>은 구성 요소 트리에서 해당 내용을 복제하지 않지만 JSF 수명주기의 각 단계에서 하위 구성 요소를 반복적으로 반복합니다. 따라서 구성 요소 트리에는 4 개의 "항목"구성 요소 만 포함됩니다.

1이 사실이고 구성 요소 트리에 숨겨진 많은 구성 요소가있을 수 있다는 것은 성능에 대한 우려입니다. 40 개가 아니라 40 개의 항목이 있다고 가정 해 봅시다.

related answer에 설명되어 있지만, 많은 구성 요소가 필요합니다.

는 조건이 (내가. 내가 600하지 렌더링 구성 요소가 웹 애플리케이션 응답 시간 300 밀리 추가 추가, 숫자 손을하지만, IIRC가 없습니다. 잠시 뒤이에 대한 벤치 마크를했다) c : if와 같이 동작하고 트리에 구성 요소를 포함하지 않는 태그 핸들러? 또는 최후의 수단으로 c : if를 사용해야합니까?

값 표현식이있는 태그 핸 들러에는 모든 제한이 있으므로 가능한 경우 태그를 지우는 것이 좋습니다. 하지만 실제로, 구성 요소 트리에 포함되지 않도록하려면 <c:if>도 사용합니다.

+0

답변 해 주셔서 감사합니다. 나는 완전히 에 대해 잊어 버렸습니다. 구성 요소가 중복되지 않습니다. – Nick