我有以下按钮:

   <h:commandButton
     disabled="#{mybean.searching}"
     binding="#{mybean.searchButton}"
     actionListener="#{mybean.searchForLicenses}"
     value="Search" />


调试时,我看到actionListener首先被调用两次,然后被调用三次,然后单击四次,依此类推。

似乎每次重新加载actionListener都会再注册一次。

我正在将Mojarra 2.1.3(也尝试2.0.6)和Tomcat 7与IceFaces一起使用。

绑定是通过以下方式完成的:

private javax.faces.component.UICommand searchButton;

public void setSearchButton(UICommand searchButton) {
  this.searchButton = searchButton;
}

public UICommand getSearchButton() {
  return searchButton;
}

最佳答案

如果将组件绑定到会话或应用程序范围的bean而不是请求范围的bean,则会发生这种情况。这简直是​​一个糟糕的设计。完全相同的组件将在多个请求/视图之间重用。您需要将Bean放入请求范围,或者完全摆脱组件绑定。

注意,将组件直接绑定到Bean通常是代码中某些地方设计不良的标志。您认为这是解决方案的功能,功能要求和/或问题是什么?如果您对此进行详细说明,我们也许可以提出正确的方法。

另请注意,仅使用动作侦听器也是一种设计气味。我希望“ searchForLicenses”是一种正常的操作方法。另请参见Differences between action and actionListener

10-05 23:18