2013-06-03 3 views
2

다음 코드는 데이터베이스에서 목록을 반복하고 각 항목에 대한 데이터 테이블을 작성합니다. 각 항목에는 데이터 테이블에 표시 될 열 목록이 있습니다. 내가 겪고있는 문제는 composite 코드에서 p : columns의 value 속성이 두 번째로 호출 될 때 변경되지 않는다는 것입니다. 초기 열의 목록을 캐시하는 것 같습니다. 새로운 열 목록을 사용하도록 columns 태그를 재설정하는 방법이 있습니까?JSF Primefaces datatable, Columns 태그가 사용될 때 첫 번째 행의 첫 번째 셀이 이전 데이터 가능 값을 사용 중임

업데이트 두 번째 데이터 테이블은 첫 번째 셀의 첫 번째 행에 이전 데이터 테이블 행 값 이름을 사용하고있는 것으로 보입니다. 다른 모든 것은 괜찮습니다. 여기에 스크린 샷이 있습니다

두 번째 업데이트 두 번째 데이터 테이블의 두 번째 페이지로 이동 한 다음 첫 번째 페이지로 돌아 가면 깨진 셀이 이미지에서 원으로 그려지며 올바른 값.

세 번째 업데이트 아래 코드에서 나는 ui : repeat 태그를 사용하고 있습니다. 나는 또한 주요면을 사용했다 : accordian 태그와 그들은 둘 다 문제를 만든다. ui : repeat 태그를 c : forEach 태그로 변경하여 아래 이미지에서 문제를 해결했습니다. 필자가 아직 가지고있는 문제는 각 데이터 테이블에 탭을 동적으로 만들 수 있도록이 태그가 초심자 태그에 있어야한다는 것입니다. 내 문제는 데이터 테이블의 p : columns 태그에 있다고 생각했지만 현재는 ui : reat 또는 p : accordian 태그인데 값 = "# {myBeanList}"속성을 사용합니다.

enter image description here

<ui:repeat var="codetable" value="#{pc_Maintenence.codeMaintenenceTables}"> 
     <util:maintenence_code pageBean="#{pc_Maintenence}" dataTableInfo="#{codetable}" 
       paginator="true" rows="10"/> 
    </ui:repeat> 

위의 코드 util : maintenence_code에서 호출되는 합성 코드입니다.

<composite:interface> 
     <composite:attribute name="pageBean" required="true" /> 
     <composite:attribute name="dataTableInfo" required="true" /> 
     <composite:attribute name="paginator" type="java.lang.Boolean" /> 
     <composite:attribute name="rows" /> 
    </composite:interface> 

    <composite:implementation> 

     <p:panel id="pnl_doc_code_table"> 
      <p:dataTable value=#{cc.attrs.pageBean.getDataTableList(cc.attrs.dataTableInfo.tableListName)}" 
       var="tblVar" paginator="#{cc.attrs.paginator}" 
       rows="#{cc.attrs.rows}" dynamic="true" cache="false"> 

       <p:columns var="column" styleClass="columns" id="columns" value="#{cc.attrs.dataTableInfo.columns}"> 

         #{tblVar[column.name]} 

        </p:columns> 
       </p:dataTable> 
      </p:panel> 
    </composite:implementation> 
+0

를 구축하고 자바 나 다음 C 태그를 추가하자 대부분 C.에서 구문을 상속 복합 코드, * F *는 의미 * 얼굴 *. – skuntsel

+0

페이지 매김을 사용하는 두 번째 업데이트에서 설명한 것처럼 첫 번째 행의 첫 번째 셀은 올바른 값을 가져옵니다. 페이지 매김의 아약스 호출이 문제를 해결하고 페이지 새로 고침이 잘못된 값을 넣는 이유는 무엇입니까? 또한 두 개 이상의 데이터 테이블을 추가하고 잘못된 값은 항상 첫 번째 행의 첫 번째 셀에 있고 항상 데이터 테이블에서만 발생합니다. 현재 데이터 표 위. – Doug

+0

그냥 제안 양식에 넣을 다음 이벤트가 실행될 때 데이터 테이블을 업데이트하십시오. – Farnsbert

답변

0

나는이 문제를 해결했다. 이 문제는 primefaces : columns 태그를 사용하는 데이터 테이블 인 동적 primefaces를 만들 때 발생하는 것으로 보입니다. ui : repeat 태그 내에서 데이터 테이블을 만들거나 primefaces : accordianPanel의 루핑 기능을 사용하면 첫 번째 행 이후 첫 번째 행의 첫 번째 셀에서 첫 번째 데이터 테이블 이후에 만들어진 모든 데이터 테이블에 잘못된 값이 생깁니다. 데이터 테이블의 다른 모든 셀에는 올바른 값이 있습니다. 나는 또한 headerText가 잘못되어 항상 이전 데이터 테이블 headerText (첫 번째 데이터 테이블의 headerText가 항상 옳다는 사실)에 주목했다.

이 문제를 해결하기 위해 나는 jstl : forEach 태그를 primefaces : accordianPanel 태그 안에 배치했습니다. 이로 인해 문제가 해결되었습니다. 이것은 ui : repeat 및/또는 primefaces : accordianPanel이 데이터 테이블을 렌더링하는 방법과 관련한 문제인 것으로 보입니다. 다음은 올바르게 작동하는 코드입니다. 여기

<h:form styleClass="form" id="frmcodes"> 
     <p:tabView styleClass="tabView" id="tabview_maintenence" rendered="#{user.khecorpAdmin}"> 
      <p:tab id="tab_code_tables" title="Code Tables"> 
       <p:accordionPanel id="pnl_accord_codetables"> 
        <c:forEach items="#{pc_Maintenence.codeMaintenenceTables}" var="codetable"> 
         <p:tab title="#{codetable.tableName}">     
          <util:maintenence_code pageBean="#{pc_Maintenence}" dataTableTemplate="#{codetable}"/> 
         </p:tab> 
        </c:forEach> 
       </p:accordionPanel> 
      </p:tab> 
      </p:tabView> 
      <p:messages id="msg" autoUpdate="true"/> 
    </h:form> 

가 그런데 ... 데이터 테이블을

<composite:interface> 
     <composite:attribute name="pageBean" required="true"/> 
     <composite:attribute name="dataTableTemplate" required="true" /> 
    </composite:interface> 

    <composite:implementation> 
     <p:panel id="pnl_table"> 

      <p:dataTable value="#{cc.attrs.pageBean.getDataTableList(cc.attrs.dataTableTemplate.tableListName)}" 
       var="tblVar" paginator="true" rows="10" rowIndexVar="tblIndx" 
       editable="#{cc.attrs.dataTableTemplate.editable}"> 

       <p:columns id="columns" value="#{cc.attrs.dataTableTemplate.columns}" 
        var="column" headerText="#{column.heading}"> 

        <p:cellEditor> 
         <f:facet name="output"> 
          <h:outputText value="#{tblVar[column.name]}"/> 
         </f:facet> 

         <f:facet name="input" rendered="#{column.editable}"> 
          <p:inputText value="#{tblVar[column.name]}" rendered="#{column.editable}"/> 
         </f:facet> 
        </p:cellEditor> 
       </p:columns> 
       <p:column rendered="#{cc.attrs.dataTableTemplate.editable}"> 
        <p:rowEditor /> 
       </p:column> 
      </p:dataTable> 
     </p:panel> 
    </composite:implementation>