2011-08-31 2 views
0

데이터 표의 버튼을 클릭하면 대화 상자를 열려고합니다. 대화 상자에는 버튼이 속한 행과 관련된 세부 정보가있는 다른 데이터 테이블이 있습니다. 리스너는 상세 데이터 테이블에 필요한 변수를 설정합니다. 다음 스 니펫을 사용하면 actionListener가 시작되기 전에 업데이트 (및 세부 정보 테이블에서 사용되는 목록 만들기)가 수행되므로 대화 상자의 dataTable이 항상 비어있는 것처럼 보입니다. 왜? 그게 원하는 행동인가요? 내 문제를 해결할 다른 방법이 있습니까?p : commandButton을 사용하여 아약스 프로세스 후에 actionListener가 호출되는 이유는 무엇입니까?

동일한 결과를 갖는 actionListener 대신 action을 사용했습니다. 당신으로

INFO: getTimbratureDataList 
INFO: Nessuna timbratura. 
INFO: getTimbratureDataList 
INFO: Nessuna timbratura. 
INFO: getTimbratureDataList 
INFO: Nessuna timbratura. 
INFO: getDettaglioDataList list dettaglio: 4 
INFO: timbratureDettAction 
INFO: gius corrente 315 

: 호출의 순서 여기

 <p:dialog header="#{msgs.timbrature}" widgetVar="tDialog" resizable="false"> 

        <p:dataTable id="timbrature_dt" 
           value="#{dispCongediMBean.timbratureDataList}" 
           var="tdett"> 
         <p:column> 
          <f:facet name="header"> 
           #{msgs.data} 
          </f:facet> 
          <h:outputText value="#{tdett.sDtComp}"/> 
         </p:column> 
         .... 

됩니다 : 여기

     <p:column style="width:16px;padding-left:4px;padding-right:4px;"> 
          <f:facet name="header"> 

          </f:facet> 
          <p:commandButton image="ui-icon ui-icon-search" 
              style="width:1.8em;height:1.8em" 
              onsuccess="tDialog.show()" 
              title="#{msgs.dettaglio}" 
              process="@this, timbrature_dt" 
              update="timbrature_dt" 
              immediate="true" 
              actionListener="#{dispCongediMBean.timbratureDettAction(dett)}"> 
          </p:commandButton> 
         </p:column> 

대화입니다 : 여기

첫 번째 데이터 테이블의 요소 버튼입니다 getTimbratureDataList() 메소드는 t를 올바르게 설정 한 actionListener timbratureDettAction() 전에 호출됩니다. 그는 불행히도 사용되지 않는 가치가 있습니다.

글래스 피쉬와 프라임 엣지 2.1.1을 사용하고 있습니다.

답변

0

현재 버튼과 대화 내용 자체를 모두 처리하려고하는 것처럼 보입니다. 이는 컴포넌트 트리를 다시 빌드해야한다는 것을 의미하기 때문에 물론 getter가 세부 대화 상자에 호출됩니다.

따라서 당신은 단지 버튼을 처리하고 단지 상세 테이블을 다시 렌더링해야합니다 <p:commandButton image="ui-icon ui-icon-search" style="width:1.8em;height:1.8em" onsuccess="tDialog.show()" title="#{msgs.dettaglio}" process="@this" update="timbrature_dt" immediate="true" actionListener="#{dispCongediMBean.timbratureDettAction(dett)}">

+0

감사하지만 그것은 작동하지 않습니다. 이 경우 버튼 클릭 후 getTimbratureDataList가 호출되지 않습니다. – maxqua72

+0

문제를 해결하기 위해 알아 낸 유일한 방법은 명령 단추가 완료되면 다른 아약스 요청을 트리거하는 것입니다 (더러운 해결책입니다) : oncomplete = "PrimeFaces.ajax.AjaxRequest ('/ econsob/faces/protected/disp_congedi_permessi_dettaglio .com ": {{{{{{{{{{{{{{{{{{{{{{{{ – maxqua72

관련 문제