JSF h:commandButton在窗体中触发其他命令按钮?

时间:2014-03-02 22:26:22

标签: ajax jsf

我有一个包含几个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>

当我点击“更新”按钮时,似乎还会调用“删除”和“添加到愿望清单”按钮......?

1 个答案:

答案 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>