2014-11-05 4 views
1

아래 코드가 있는데, 아약스 호출에서 사이드 테이블의 구성 요소 중 일부가 업데이트되지 않습니다. "lms-vouchers-error-div"구성 요소와 다른 구성 요소 외부 데이터는 업데이트되지 않습니다. 여러 가지 방법을 시도했지만 작동하지 않습니다. 도와주세요 "형태는"양식 ID에게 있습니다테이블 외부의 JSF ajax 구성 요소 업데이트가 작동하지 않습니다.

<h:panelGroup id="lms-prestige-inner-div" layout="block" 
      styleClass="lmsPricePlanInnerDiv"> 
      <table class="pricePlanTable"> 
       <ui:repeat var="vo" value="#{orderOverviewBean.prestigeVouchers}" 
        varStatus="status"> 

        <ui:fragment rendered="#{status.index > 0}"> 
         <tr> 
          <td colspan="2"> 
           <h2 class="#{vo.atLeastOneItemSelected ? 'remove' : 'redeem'}"> 
            <span 
             class="#{vo.atLeastOneItemSelected ? 'removeline-center' : 'redeemline-center'}">or</span> 
           </h2> 
          </td> 
         </tr> 
        </ui:fragment> 
        <tr> 
         <td style="width: 302px">Voucher 
          #{status.index+1}.$#{-vo.amount} expires on 
          &nbsp;#{vo.expireDate}</td> 

         <td class="spanDisable"><h:commandLink value="> Redeem" 
           styleClass="removeUnderline" rendered="#{not vo.selected}" 
           disabled="#{vo.atLeastOneItemSelected}" 
           action="#{orderOverviewBean.addPrestigeVoucher}"> 
           <f:setPropertyActionListener 
            target="#{orderOverviewBean.selectedVoucherItem}" 
            value="#{vo}" /> 

           <f:ajax 
            render=":form:total-price-container :form:lms-vouchers-error-div :form:lms-prestige-div" 
            onevent="lmsVoucherDisplayLoader.displayLoader" /> 
          </h:commandLink> <h:commandLink value="> Remove" styleClass="removeUnderline" 
           rendered="#{vo.selected}" 
           action="#{orderOverviewBean.removePrestigeVoucher}"> 
           <f:setPropertyActionListener 
            target="#{orderOverviewBean.selectedVoucherItem}" 
            value="#{vo}" /> 

           <f:ajax 
            render=":form:total-price-container :form:lms-vouchers-error-div :form:lms-prestige-div" 
            onevent="lmsVoucherDisplayLoader.displayLoader" /> 
          </h:commandLink></td> 


         <ui:fragment rendered="#{vo.selected}"> 

          <td style="width: 350px; text-align: right;"> 
           -$#{-vo.amount}</td> 
         </ui:fragment> 

        </tr> 
       </ui:repeat> 
      </table> 
     </h:panelGroup> 
+0

서버 측 코드를 디버그하여 'lms-vouchers-error-div'의 상태가 변경되었는지 확인 했습니까? –

+0

코드를 게시 할 수 있습니다 어디에 렌더링 div가 무엇입니까? – ZaoTaoBao

+0

lms-vouchers-error-div의 렌더링 된 속성이 문제 일 수 있습니다. 렌더링 된 속성 및 해당 컨테이너에 대한 아약스 업데이트를 지정하지 않고 다른 컨테이너 (예 : panelGroup)로 둘러 쌉니다. – kaos

답변

0

문제의이 종류로 이어질 일반적인 실수는 조건부 렌더링 아약스/업데이트 할 수있는 컨테이너를 만들 수 있습니다 :.

예 : 당신은 아약스로 업데이트하려고하면 이 컨테이너 :

<ui:fragment id="lms-vouchers-error-div" rendered="#{false_condition}"/> 

그렇지 않은 이전 HTML에 존재하는 않기 때문에 당신의 아약스/업데이트 프로세스와 true로 렌더링 상태 변경이가 렌더링되지 않습니다하더라도, 코드, 그래서 대신에, 포장하려고 생성 ('항상 표시되는 래퍼 컨테이너'에 있음) 조건부 포함 어, <h:panelGroup/> 또는 경우에 당신은 primefaces

<p:outputPanel/> 사용이 어쩌면 당신의 경우에 작동하는 제안입니다

<h:panelGroup id="target_to_update_with_ajax"> 
    <ui:fragment id="lms-vouchers-error-div" rendered="#{condition}"/> 
</h:panelGroup> 

,하지만 당신은 코드의 나머지 부분을 게시하는 경우가 더 명확 할 것이다.

관련 문제