CommandButton生成导致两个axjax请求的change事件

时间:2014-05-07 13:08:18

标签: jsf primefaces

我有<p:inputText>嵌套<p:ajax event="change" listener="myValidate"><p:commandButton actionListener="myValidate" process="@form">

问题是, myValidate 方法被调用两次,因为按下commandButton会首先触发onChange-Event(在单击CommandBt之前编辑文本时)然后调用< em> myValidate 方法。之后,CommandButton actionListener将调用 myValidate

如何阻止双重通话?

我需要的是:

  • 在更改文本
  • 后离开inputText时调用myValidate
  • 在推送CommandButton时调用myValidate(可悲的是隐含触发另一个)

thanx提前获得帮助。

1 个答案:

答案 0 :(得分:0)

如果您指定updateprocess,则会调用ajax请求onBlur(当字段失去焦点时):

<p:inputText>
  <p:ajax event="change" listener="myValidate" update="myForm" process="@form">
</p:inputText>

但请注意,如果输入失去焦点的方式是您单击命令按钮,那么将会有2个后续的AJAX调用。这是因为第一个是由javascript onBlur事件触发的,第二个是由按钮上的onClick事件触发的。但是,在这种情况下(如果您先进入另一个字段,它将按预期工作)。

通常的解决方案是坚持使用JSF模型并在提交时验证整个表单,而不是在离开它时的每个字段。