为什么在同一页面上提交另一个表单时会触发 f:event postValidation

Why is f:event postValidation triggered while submitting another form on the same page

我有一个 jsf 2.2 应用程序 (myfaces 2.2.8)。在一个页面上,我有来自不同包含的 (jsf:include) facelet 文件的多个表单。

在一个文件中,表单是用 <f:event type="postValidate"...> 标签定义的。在另一个包含的文件中,另一个表单定义为只有一个提交按钮。

单击此按钮会触发 f:event 中定义的侦听器。为什么?

f:event 标签未绑定到任何表单。它只是一个标记,告诉 JSF 在声明的 type 事件发生时调用侦听器,无论在视图中的哪个位置。因此,这是在提交任何表单时调用的预期行为。您无论如何都可以将源表单抓取到侦听器中:

public void listener(ComponentSystemEvent evt) {
    //Get the source form
    evt.getSource();
}

另请参阅: