我有一个包含几个h:commandButtons的表单 - 都附加了f:ajax标签。当我触发其中一个命令按钮时,我会在日志中看到所有操作都被解雇 - 所以所有操作都被调用了?
这是h:commandButton + f:ajax组合的正常行为吗?
我正在使用commandButton的action属性而不是f:fajax上的监听器。
希望有人可以向我解释。
提前致谢。
/索伦
修改
简化代码:
<h:form>
<ui:repeat ...>
<h:inputText value="#{order.quantity}"/>
</ui:repeat>
<h:commandButton type="button" action="#{facade.updateOrderItems()}" value="Update">
<f:ajax execute="@form" render=":orderList" onevent="onAjaxEvent"></f:ajax>
</h:commandButton>
<h:commandButton type="button" action="#{facade.deleteSelectedOrderItems(order)}" value="Delete">
<f:ajax execute="@form" render=":orderList" onevent="onAjaxEvent"></f:ajax>
</h:commandButton>
<h:commandButton type="button" action="#{facade.addOrdersItemsToWishList(order)}" value="Add to wish list"> <f:ajax execute="@form" render=":orderList" onevent="onAjaxEvent"></f:ajax>
</h:commandButton>
</h:form>
当我点击“更新”按钮时,似乎还会调用“删除”和“添加到愿望清单”按钮......?
答案 0 :(得分:3)
我希望不要迟到。 两天前我遇到了同样的问题,现在最终解决了。事实证明,问题是type =“button”。所以扔掉它就是解决方法。在你的f:ajax中你必须使用execute =“@ form”,以便触发valueChange-event输入字段以使bean中的数据生成,否则只执行命令按钮并且不注册valueChange。 所以你的按钮应该是这样的:
<h:commandButton action="#{facade.deleteSelectedOrderItems(order)}" value="Delete">
<f:ajax execute="@form" render=":orderList" onevent="onAjaxEvent"></f:ajax>
</h:commandButton>