如何在selectOneMenu更改上执行managed bean方法?

问题描述:

我有以下Managed Bean的:如何在selectOneMenu更改上执行managed 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 

在此先感谢

+1

如果你的听众不接受事件,你应该使用'listener =“#{myBean.mostrarCentroSeleccionado()}”' – Holger

+0

完整的代码将使这个问题无法访问......实际上@Holger answer对我有效 – Termosfera

的问题是在标签:

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

功能必须有 “()” becouse我可不是服用该事件。

如果Holger的解决方案可行, 没关系。

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

+0

如果您对PrimeFaces有一点了解,您会明白这里的重点在于以下两种选择之一。 1-在xhtml标记或属性处丢失或错误。 2-执行方法存在的问题 其他任何事情只是为了将您置于上下文中。这不相关或重要。 – Termosfera