2013-10-22 32 views
1

我已經閱讀過所以和其他地方有關我的問題。使用JSF ajax調用不正確

我明白我在做什麼是完全錯誤的。我的問題是,我不知道如何去做right,如果有人能幫助我,我會喜歡它。

目前我有什麼看起來是這樣的:

<ul class="unstyled"> 
    <ui:repeat value="#{paymentDetailsBean.products}" var="product" varStatus="status"> 
     <li> 
      <div> 
       <h:selectBooleanCheckbox value="#{product.initiallySelected}"> 
        <f:ajax render="paymentDetailsForm:totalPriceText" listener="#{paymentDetailsBean.updateTotalPrice}"></f:ajax> 
       </h:selectBooleanCheckbox> 
      </div> 
     </li> 
    </ui:repeat> 
</ul> 

product.initiallySelected是,我想更新,當用戶確認/取消選中的產品的布爾值。

我還使用了AJAX標籤重新呈現這樣的:

<h:outputText id="totalPriceText"><b>#{passengerDetailsBean.formatCurrency(paymentDetailsBean.totalPrice.toString())}</b></h:outputText> 

基本上我想要的總價格OT進行更新,因爲選擇/取消選擇一個產品將使它上升或下降。我還使用了AJAX標籤(這是問題的癥結所在,很明顯)來調用後端此功能:

public void updateTotalPrice(AjaxBehaviorEvent event) 
{ 
    this.totalPrice = 0.0f; 

    for (Product product : this.getProducts()) 
    { 
     if (product.getInitiallySelected()) 
     { 
      this.totalPrice += product.getCurrencyAmountGroup().getAmount(); 
     } 
    } 

    this.totalPrice += this.getTotalFaresAmount(); 
} 

所有這些作品,但它是非常緩慢的,我知道這是因爲我不應該使用ajax標籤來做業務邏輯。我不知道這樣做的正確方法。任何人都可以幫我嗎?

+0

你阿賈克斯行動將循環中的所有產品,即使你剛剛檢查/取消選中單這取決於複選框的當前選擇的產品和當前值增加/減少產品,這就是爲什麼它變得緩慢。你可以修改'updateTotalPrice'方法只計算所選產品而不是所有產品。 – ggDeGreat

+0

@ggDeGreat請您詳細說明一下嗎?我不太明白。 – Skytiger

回答

1

如果您想要通過選中/取消選中特定產品來增加/降低總價值,並假設您的環境支持EL 2.2+(根據代碼段判斷真實情況),可以將當前金額存儲爲一個bean屬性

<ui:repeat value="#{paymentDetailsBean.products}" var="product"> 
    <li> 
     <div> 
      <h:selectBooleanCheckbox> 
       <f:ajax render=":paymentDetailsForm:totalPriceText" 
         listener="#{paymentDetailsBean.updateTotalPrice(product, component.value)}" /> 
      </h:selectBooleanCheckbox> 
     </div> 
    </li> 
</ui:repeat> 
<h:outputText value="#{paymentDetailsBean.totalPrice}" /> 

隨着聽衆:

public void updateTotalPrice(Product product, Boolean direction) { 
    totalPrice += product.getCurrencyAmountGroup().getAmount() * 
         (direction ? 1 : -1); 
} 
+0

目前無法訪問我的工作,但會在早上第一時間嘗試一下,並讓您知道結果。謝謝! – Skytiger