私は自分の問題についてSOや他の場所を読みました。
私がやっていることは完全に間違っていることを理解しています。私の問題は、それを正しく行う方法がわからないことです。誰かが私を助けてくれれば幸いです。
現在、私が持っているものは次のようになります。
<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>
商品の選択・選択解除で値上がり・値下がりするので、基本的には合計金額を更新しないで欲しいです。また、バックエンドでこの関数を呼び出すために 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 タグを使用してビジネス ロジックを実行するべきではないためだとわかっています。正しいやり方がわかりません。誰でも私を助けてもらえますか?