2012-01-10 2 views
1
<h:dataTable value="#{bean.listOfRows}" var="eachRow" id="theDataTable"> 
    <h:column> 
     <p:outputPanel rendered="#{eachRow.visible}"> 
       <h:selectManyCheckbox 
        value="#{xxxx}" 
        label="#{xxxx}"> 
        <f:selectItems value="#{checkBoxItems}" var="eachItem" itemLabel="#{eachItem.label}" itemValue="#{eachItem.value}" /> 
        <p:ajax event="change" update="theDataTable" /> 
       </h:selectManyCheckbox> 
     </p:outputPanel> 
     <p:outputPanel rendered="#{eachRow.visible}"> 
       <h:selectOneRadio 
        value="#{xxxx}" 
        label="#{xxxx}"> 
        <f:selectItems value="#{radioItems}" var="eachItem" itemLabel="#{eachItem.label}" itemValue="#{eachItem.value}" /> 
        <p:ajax event="change" update="theDataTable" /> 
       </h:selectOneRadio> 
     </p:outputPanel> 

     <p:outputPanel rendered="#{eachRow.visible}"> 
     </p:outputPanel> 
     <p:outputPanel rendered="#{eachRow.visible}"> 
     </p:outputPanel> 
     <p:outputPanel rendered="#{eachRow.visible}"> 
     </p:outputPanel> 
     <p:outputPanel rendered="#{eachRow.visible}"> 
     </p:outputPanel> 
    . 
    . 
    . 

    </h:column>          
</h:dataTable> 

데이터 테이블의 행 집합 내에서 일부 행은 이전 행의 입력 구성 요소에 대한 VALUE CHANGE EVENTS (AJAX 요청을 사용하여 처리 됨)에 따라 조건부로 렌더링됩니다. 전체 데이터 테이블을 다시 렌더링하지 않고도이 행을 볼 수 있습니까? ? ? PrimeFaces 2.2.1에서 JSF 2.0.6을 사용하고 있습니다.전체 데이터 테이블을 업데이트하지 않고도 데이터 테이블 내에서 구성 요소의 조건부 렌더링이 가능합니까?

답변

0

이 질문에 대해 BalusC가 제안한 것처럼 link은 이와 같이 데이터 테이블 열에 패딩을 사용합니다.

<h:dataTable id="mainDatatable" value="#{bean.listOfRows}" var="eachRow" id="theDataTable"> 
    <h:column> 
    <h:panelGroup id="padding" layout="block"> 
     <p:outputPanel rendered="#{eachRow.visible}"> 
      <h:selectManyCheckbox 
       value="#{xxxx}" 
       label="#{xxxx}"> 
       <f:selectItems value="#{checkBoxItems}" var="eachItem" itemLabel="#{eachItem.label}" itemValue="#{eachItem.value}" /> 
       <p:ajax event="change" update="theDataTable" /> 
      </h:selectManyCheckbox> 
     </p:outputPanel> 
    <p:outputPanel rendered="#{eachRow.visible}"> 
      <h:selectOneRadio 
       value="#{xxxx}" 
       label="#{xxxx}"> 
       <f:selectItems value="#{radioItems}" var="eachItem" itemLabel="#{eachItem.label}" itemValue="#{eachItem.value}" /> 
       <p:ajax event="change" update="theDataTable" /> 
      </h:selectOneRadio> 
    </p:outputPanel> 

    <p:outputPanel rendered="#{eachRow.visible}"> 
    </p:outputPanel> 
    <p:outputPanel rendered="#{eachRow.visible}"> 
    </p:outputPanel> 
    <p:outputPanel rendered="#{eachRow.visible}"> 
    </p:outputPanel> 
    <p:outputPanel rendered="#{eachRow.visible}"> 
    </p:outputPanel> 
. 
. 
. 
    </h:panelGroup> 
    </h:column>          
</h:dataTable> 

데이터 테이블은 렌더링 여부와 관계없이 열의 모든 구성 요소에 패딩을 만듭니다. 이제는 당신의 의존적 인 논리에 달려 있습니다. 데이터 테이블의 특정 행을 업데이트하려면 Backing Bean에서 생성 된 클라이언트 ID를 사용하거나이 question에서 BalusC가 제안한대로 구성 요소를 Bean에 바인딩합니다. 클라이언트 ID는 mainDatatable : rowIndex : padding 형식입니다. 건배!

+0

감사합니다. 이것은 좋은 해결책이다. – Vijay

관련 문제