如果我是你,我可能会尝试在客户端使用一些带有 jQuery 的 JavaScript 来完成。
但是如果你真的想用纯 Java 和 JSF 来做,你可以做的一件事是totalPrice
在其中一个字段unitPrice
或更新时更新该字段quantity
:
public void setUnitPrice(BigDecimal unitPrice) {
this.unitPrice = unitPrice;
this.updateTotalPrice();
}
public void setQuantity(BigDecimal quantity) {
this.quantity = quantity;
this.updateTotalPrice();
}
private void updateTotalPrice() {
// update total price accordingly:
if (unitPrice != null && quantity != null){
this.totalPrice = this.unitPrice.multiply(this.quantity);
}
}
这样,您的模型也将始终保持最新。
然后,您只需要onchange
在unitPrice
和quantity
表单控件的事件上重新渲染使用 ajax 显示它的组件,如下所示:
<h:panelGrid>
<label>Unit Price</label>
<h:inputText value="#{myBean.unitPrice}">
<f:convertNumber type="currency" />
<f:ajax render="totalPrice" />
</h:inputText>
<label>Quantity</label>
<h:inputText value="#{myBean.quantity}">
<f:convertNumber type="currency" />
<f:ajax render="totalPrice" />
</h:inputText>
<h:outputText id="totalPrice" value="#{myBean.totalPrice}">
<f:convertNumber type="currency" />
</h:outputText>
</h:panelGrid>