【问题标题】:How to execute managed bean method on selectOneMenu change?如何在 selectOneMenu 更改上执行托管 bean 方法?
【发布时间】:2016-11-09 12:48:57
【问题描述】:

我有以下托管 Bean:

import javax.faces.bean.ManagedBean;

@ManagedBean
public class MyBean {

    public void mostrarCentroSeleccionado() {
        System.out.println("Value changed");
    }

}

在我的 .xhtml 文件中包含以下 selectOneMenu:

<p:selectOneMenu value="#{MyBean.centros.idcentro}" >

    <p:ajax event="change" listener="#{MyBean.mostrarCentroSeleccionado}" />

    <f:selectItem itemLabel="Seleccione un centro" itemValue="" />
    <f:selectItems value="#{MyBean.centros}" />
</p:selectOneMenu>

当我运行该代码时,出现以下异常:

javax.el.MethodNotFoundException

提前致谢

【问题讨论】:

  • 如果你的听众不接受这个事件,你应该使用listener="#{myBean.mostrarCentroSeleccionado()}"
  • 完整的代码会让这个问题无法解决......事实上@Holger 的答案对我有用

标签: jsf primefaces el methodnotfound


【解决方案1】:

问题出在标签上:

<p:ajax listener="#{MyBean.function()}"/>

函数必须有“()”,因为我不参加活动。

【讨论】:

    【解决方案2】:

    如果 Holger 的解决方案成功了,那就没问题了。

    但是:以小写字母开头的 Java 类名是可怕的。您可以以大写字母开头,JSF 将为您管理它,因此您仍然可以使用 listener="#{myBean.mostrarCentroSeleccionado()}" 如果这不符合您的要求,您可以使用 @ManagedBean(name = "myBean") 您可以选择任何您想要的,而不是 myBean。

    【讨论】:

    • 如果您对 PrimeFaces 有一点了解,您就会明白这里的重点在于两个选项之一。 1- xhtml 标记或属性缺失或错误。 2-执行任何其他方法的问题只是将您置于上下文中。它不相关或不重要。
    猜你喜欢
    • 1970-01-01
    • 2013-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-27
    • 1970-01-01
    相关资源
    最近更新 更多