2013-10-21 3 views
0

두 개의 패널을 포함하는 rowexpandor가있는 데이터 테이블을 가지고 있는데, 하나는 일반 텍스트이고 다른 하나는 주석 목록을 가지고 있습니다. 사용자가 새로운 설명을 추가 할 수있는 버튼이 있습니다. 이제 대화 상자는 별도의 형식으로되어 있으며 아래 코드를 참조하십시오. 내 문제는 일단 코멘트가 추가되면 모든 코멘트를 포함하는 패널이 새로 고쳐지지 않는다는 것입니다. 다음은 코드 샘플입니다.대화 상자에서 PrimeFaces datatable 행 업데이트

<h:form id="formName"> 


     <p:dataTable id="prTable" rowIndexVar="index" sortMode="multiple" styleClass="iris_table" var="value" value="#{bean.listValues}" 
        paginator="true" rows="10" paginatorTemplate="{CurrentPageReport} {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}" 
        rowsPerPageTemplate="5,10,15"> 
      <p:ajax event="rowToggle" onstart="rowMutalExclusive();"/> 


      <p:column style="width:2%"> 
       <p:rowToggler /> 

      </p:column> 



      <p:column id="message" 
         headerText="Description" 
         filterMatchMode="contains" filterStyle="display: none;"> 
       <h:outputText value="#{value.description}" /> 
      </p:column> 


      <p:column id="deadline" headerText="Deadline" filterStyle="display: none;"> 

       <h:outputText value="#{value.endDate}"> 
        <f:convertDateTime pattern="dd.MM.yyyy " /> 
       </h:outputText> 
      </p:column> 
      <p:rowExpansion > 

       <div class="iris_peerreview_details"> 

        <div class="comments"> 

         <p:commandButton value="Comment" process="@this" update=":dialogForm:commentDlg" oncomplete="commentDialog.show()"> 
          <f:setPropertyActionListener target="#{bean.review}" rendered="check" value="#{value.review}"></f:setPropertyActionListener>  
         </p:commandButton> 
         <div class="clear"></div> 
        </div> 
        <p:panel id="pnlHelp" style='border:none'> 
         <p:dataList id="check" rowIndexVar="index" value="#{bean.commentsFromCase(value.review)}" var="commentReview"> 
          <div class="messages"> 
           <p> 
            <h:outputText value="#{commentReview.date}"> 
             <f:convertDateTime pattern="MM.dd.yyyy 'at' h:mm a"></f:convertDateTime> 
            </h:outputText> 

           </p> 
           <p class="message"> 
            <h:outputText styleClass="message" value="#{commentReview.comment}"/> 

           </p> 

          </div> 
         </p:dataList> 
        </p:panel> 
       </div> 


      </p:rowExpansion> 
     </p:dataTable> 
    </h:form> 
    <h:form id="dialogForm" > 
     <p:dialog id="commentDlg" header="Comment" widgetVar="commentDialog" resizable="false" 
        modal="true"> 

      <h:panelGrid id="display" columns="2" cellpadding="4" style="margin:0 auto;"> 

       <h:outputText value="Comment"" /> 
       <h:inputText value="#{bean.comment}" required="true" requiredMessage="Please enter a comment" style="font-weight:bold"/>            
       <p:commandButton id="save" actionListener="#{bean.commentCase()}" update=":formName:prTable:pnlHelp" oncomplete="commentDialog.hide();" 
            value="Comment"/> 
       <p:commandButton id="cancelButton" onclick="commentDialog.hide()" value="Cancel"/> 
      </h:panelGrid> 
     </p:dialog> 
    </h:form> 

일부 코드를 제거하고 일부를 마스크해야하므로 나를 용서해야하지만 일반적으로 이것이 무엇입니까. 이제 일단 주석 버튼을 클릭하면 대화 상자가 나타나고 주석이 db에 저장되고 모든 것이 잘 작동하지만 주석이있는 행의 패널을 업데이트 할 수 없습니다. 제가 추측하고 문제가 렌더링 패널 ID 실제로 각 행

formName:prTable:0:pnlHelp 

그 값이 변경되는 다음 번 페이지이다. 이제 대화 상자에서 내 업데이트 ID를 찾을 수 없다는 것을 이해하지만 인덱스를 입력하고 렌더링에서이 특정 ID를 만들려고하면 찾을 수없는 예외를 throw합니다.

나는 대화 상자를 dataTable 내부에 배치하여 시도했으나 업데이트로 확인보다 작동하지만 더 많은 문제가 발생하므로 해당 옵션을 삭제해야합니다. 또한 내가 전체 테이블을 업데이 트하지만 괜찮 았어 문제는 rowexpandor가 필요하지 않은 것이고, 실제로는 전체 테이블을 리프레싱하는 것이 좋지 않은 것입니다. 이 도움이된다면 Primeface 4.0을 사용하고 있습니다. jsf 2.0.

답변

0

예, 모든 행에 대해 id 값이 변경됩니다. "pnlHelp"로 끝나는 모든 구성 요소를 업데이트합니다

<p:commandButton id="save" actionListener="#{bean.commentCase()}" update="@([id$=pnlHelp])" oncomplete="commentDialog.hide();" 
            value="Comment"/> 

코드에 버튼을 변경, CSS를 선택기로 업데이트하려고합니다. 더 많은 정보 : http://www.w3schools.com/cssref/css_selectors.asp

+0

네, 고마워요. 하지만이 경우에는 1 행을 확장했을 때 문제가되지 않을 것입니다. 이후의 참조에서 어떻게하면 datatable의 특정 부분을 외부에서 업데이트해야합니까? 말하자면 나는 두 개의 열이 내가이 선택기를 할 수 있고 적절한 라인을 선택할 수 있지만 내가이 일을 더 좋은 방법이라고 가정 것이 열리는 말할까요? – user2903754

+0

미안 답변 지연. 선택기 @ ([id $ = pnlHelp])는 pnlHelp로 끝나는 모든 패널을 업데이트해야합니다. 따라서 두 개의 패널이있는 경우 두 패널을 업데이트해야합니다. 이것은 일어나지 않고있다? – andremonteiro

+0

아니 그게 정확히 무슨 일이야하지만 내가 뭘 원하는 하나의 패널을 업데이 트하는 대신 두 – user2903754

관련 문제