自动计算字段

时间:2014-08-18 18:35:42

标签: jsf

我有以下表格:

<h:form>
    <h:inputText size="2" value="#{orderMB.quantity}" />
    <h:outputLabel value=" #{orderMB.totalPriceOneItem} €" />
    <h:commandButton value="submit" />
</h:form>

我在会话作用域托管bean中有以下方法:

public void setQuantity(int quantity) {
    this.quantity = quantity;
    setTotalPriceOneItem(quantity* item.getItem().getPrice().doubleValue());
}

我想在输入字段的每次按键时自动更新总价格结果。如何在不按下提交按钮的情况下实现此目的?

1 个答案:

答案 0 :(得分:2)

您的代码无法在任何地方执行此操作。它错过了<f:ajax>

<h:inputText size="2" value="#{orderMB.quantity}">
    <f:ajax event="keyup" render="total" />
</h:inputText>
<h:outputText id="total" value="#{orderMB.totalPriceOneItem} €" />

event属性可以设置为JSF必须通过ajax提交表单的任何HTML DOM事件,例如clickkeyupblur,{{可以将focus属性设置为任何需要在ajax提交完成时更新的JSF客户端ID。在这种情况下,它会引用显示总价的组件ID。

请注意,我已将wrong render替换为<h:outputLabel>。还要注意的是,setter并不是执行业务逻辑的正确位置(getter也不是!)。最好将setter方法恢复为真正的setter并添加ajax侦听器方法:

<h:outputText>
<f:ajax event="keyup" listener="#{orderMB.updateTotalPriceOneItem}" render="total" />

如果它仍然不起作用,请验证模板中是否有public void updateTotalPriceOneItem() { totalPriceOneItem = quantity * item.getItem().getPrice().doubleValue(); } 而不是<h:head>。如果仍然徒劳,请完成commandButton/commandLink/ajax action/listener method not invoked or input value not updated


那就是说,我强烈建议暂停一下sane JSF 2.x book。以上内容通常已在第1章中介绍过。