【发布时间】:2013-10-31 00:26:23
【问题描述】:
我已经在 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 标签来做业务逻辑。我不知道正确的做法。谁能帮帮我?
【问题讨论】:
-
您的 ajax 操作将循环所有产品,即使您只是检查/取消选中单个产品,这就是它变慢的原因。您可以修改
updateTotalPrice方法仅依靠选定的产品而不是所有产品。 -
@ggDeGreat 你能详细说明一下吗?我真的不明白。
标签: java javascript jquery ajax jsf