조건부로 여러 요소를 표시하는 최상의 전략은 무엇입니까 (예 : bean 값에 따라 달라지는 필드 목록)? 내가 생각여러 필드에 대한 조건부 표시 - JSF 2.0/Primefaces
가능한 해결책 :
- JSTL
<c:if ... >
절. 내가 JSF와 JSTL을 사용하여 이해가 입니다 - 대부분의 구성 요소의 "렌더링 된" 속성을 사용합니다. 나는이 분야의 많은 을 처리해야 할 때 불행하게도 그것은
- 컨테이너에 렌더링 속성 을 컨테이너 에 요소를 퍼팅 및 설정 ... 각 하나를 설정 서투른된다
옵션 3이 가장 현명한 것 같지만 필드를 감싸는 데 사용할 구성 요소를 모르겠습니다. 레이아웃에 영향을 미치지 않는 구성 요소 여야합니다.
스팬을 래퍼로 사용하고 CSS 표시 속성을 설정할 수 있지만 필드는 계속 보이지 않고 그대로 표시됩니다.
의견이 있으십니까?
업데이트 :
는 여기에 몇 가지 실제 레이아웃 코드입니다. 나는 모두 시도했습니다 <h:panelGroup>
& <ui:fragment>
. 이러한 태그 중 하나를 사용하면 내 모든 필드를 하나의 <td>
에 넣을 수 있습니다. 이는 내 최상위 요소를 내 panelGrid
에 넣기 때문에 의미가 있습니다.
내가 원하는 방식으로 작동하는 유일한 것은 위의 목록에서 # 2입니다.
<h:panelGrid columns="2">
<!-- fields if person -->
<ui:fragment rendered="#{createEntity.entityType eq 'fizica'}">
<h:outputLabel value="Prenume: " />
<h:inputText value="#{createEntity.person.firstName}" />
<h:outputLabel value="Nume familie: " />
<h:inputText value="#{createEntity.person.familyName}" />
<h:outputLabel value="CNP: " />
<h:inputText value="#{createEntity.person.cnp}" />
<h:outputLabel value="Date carte identitate: " />
<h:inputText value="#{createEntity.person.idCardInfo}" />
<h:outputLabel value="Cetatenie: " />
<h:inputText value="#{createEntity.person.country}" />
</ui:fragment>
<!-- fields for company -->
<ui:fragment rendered="#{createEntity.entityType eq 'juridica'}">
<h:outputLabel value="Denumire firma" />
<h:inputText value="#{createEntity.company.name}" />
<h:outputLabel value="CUI" />
<h:inputText value="#{createEntity.company.cui}" />
<h:outputLabel value="Registrul Comertului" />
<h:inputText value="#{createEntity.company.regCommerceNo}" />
</ui:fragment>
</h:panelGrid>
'rendered' 속성을 사용하는 것은'c : if'보다 더 쓸쓸합니다. – BalusC
@BalusC : 예를 들어 조건부로 표시하려는 5 개의 필드 + 5 개의 레이블이있는 경우 이는 "렌더링"조건을 10 번 복사하여 붙여 넣어야한다는 것을 의미합니다. 그게 내게 서툴 잖아 ... – Bogdan
'c : if test'를'ui : fragment rendered'로 바꾸지 않는 이유는 무엇입니까? 이미 JSTL의'c : if' 태그로 포장했습니다. 대신 적절한 JSF 태그로 포장해야합니다. – BalusC