PrimeFaces ajax 更改另一个字段上的输入和操作

mys*_*cks 5 ajax jsf primefaces

我有这段代码,在输入元素的值发生变化时,我监听并更新一些其他字段。

问题是,当我通过输入某些内容并使用commandButtonid:来更改此输入字段的值时submit,它会触发侦听器(可能是因为在字段上检查值的更改blur),但不会触发侦听器X,即的actionListener为commandButton. 因此,我必须再次单击该按钮才能X调用侦听器。

当然,如果我通过单击其他地方然后单击 来导致输入字段模糊,它会按预期工作commandButton。看起来,当输入字段的模糊与单击 重合时commandButton,只会发生模糊 - 按钮的单击将被忽略。有任何想法吗?

<p:inputText ...>
  <p:ajax event="change" update="..." listener="..." />
</p:inputText>

...

<p:commandButton id="submit" ... actionListener="X" />
Run Code Online (Sandbox Code Playgroud)

编辑:我使用 PrimeFaces v5.1 和 JSF v2.1.19,FWIW。

rus*_*ert 0

我使用 JSF 和 PrimeFaces 6.1 遇到了类似的问题(也许完全相同),并将其发布在这里:

PrimeFaces inputText ajax event=valueChange 在单击 commandButton 后触发

@jasper-de-vries 回复了一个有效的、可行的解决方案:)

他的帖子的快速摘要是将 ajax 更新更改为选择器,如下所示:

<p:ajax update="@(form :input:not(button))" />
Run Code Online (Sandbox Code Playgroud)

它将更新特定元素(表单),但不会更新其他元素(按钮),因为 valueChange 或 Change 事件更新所有表单,包括按钮,然后忽略第一次单击按钮。