기본적인 접근 방식은 테이블의 rendered
속성은 메뉴의 선택 항목에 따라 다릅니다 수 있도록하는 것입니다.
<p:selectOneMenu value="#{bean.table}">
<f:selectItem itemValue="players" itemLabel="Players" />
<f:selectItem itemValue="jobs" itemLabel="Jobs" />
<f:selectItem itemValue="business" itemLabel="Business" />
...
<p:ajax update="tables" />
</p:selectOneMenu>
<h:panelGroup id="tables">
<p:dataTable value="#{bean.players}" rendered="#{bean.table == 'players'}">
...
</p:dataTable>
<p:dataTable value="#{bean.jobs}" rendered="#{bean.table == 'jobs'}">
...
</p:dataTable>
<p:dataTable value="#{bean.business}" rendered="#{bean.table == 'business'}">
...
</p:dataTable>
...
</h:panelGroup>
이 쉽게 구현할 수 있지만 (물론 <ui:include>
파일에 걸쳐 분할 할 수 있습니다) 뷰에서 많은 코드와 끝까지. 보다 진보되고 재사용 가능한 접근법은 단일 테이블의 value
이 메뉴의 선택된 항목에 의존하고 <p:columns>
을 사용하여 동적으로 열을 생성하는 것입니다. 같은 뭔가
<p:selectOneMenu value="#{bean.table}">
<f:selectItems value="#{bean.tables}" />
<p:ajax listener="#{bean.changeModel}" update="table" />
</p:selectOneMenu>
<p:dataTable id="table" value="#{bean.model}" var="item">
<p:columns value="#{bean.columns}" var="column">
<h:outputText value="#{item[column]}" />
</p:columns>
</p:dataTable>
:이 내용은 좀 더 전문화 된 열을 추가 할 때마다 덜 세밀하게 제어 할 수 있습니다
public void changeModel() {
model = populateModelBasedOn(table);
columns = populateColumnsBasedOn(table);
}
. 아마도 태그 파일로 대신 작업하고 싶을 것입니다.
올바른 데이터 테이블은 무엇입니까? jsf에서는 조건부 렌더링이 표준입니다. –
죄송합니다. JSF가 처음 인 이유는 선택한 데이터 테이블의 가시성을 변경하는 방법을 알지 못했기 때문입니다. –
그건 그렇고, 내 질문을 업데이트했습니다 –