2014-11-05 49 views
1

我有下面的代碼,任何組件旁邊的表不會更新ajax調用。組件「lms-vouchers-error-div」和其他組件外側數據不會更新。我嘗試了很多方法,但它不起作用。請幫「形式」的形式IDJSF 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'的狀態已更改? – 2014-11-05 12:15:37

+0

你可以發佈代碼沒有渲染的div嗎? – ZaoTaoBao 2014-11-05 12:20:37

+0

lms-vouchers-error-div上的渲染屬性可能是一個問題。嘗試用另一個沒有呈現屬性的容器(例如panelGroup)包圍它,並將ajax更新指向該容器。 – kaos 2014-11-05 12:26:27

回答

0

導致這種問題的一個常見的錯誤是讓有條件呈現一個Ajax /更新容器:

即:如果您嘗試使用Ajax更新此容器:

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

即使所呈現的狀態變化與您的AJAX /更新過程屬實,這將不會被渲染,因爲它沒有在以前存在的HTML生成的代碼,那麼相反,嘗試包(在'總是可見的包裝容器')你的條件包含呃,有<h:panelGroup/>或者如果您使用primefaces <p:outputPanel/>

即:

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

這是可能適用於你的情況建議,但如果您發佈的代碼的其餘部分會比較清楚。