如何使用actionListener中的包绑定bean的方法?

时间:2015-05-26 17:06:56

标签: jsf el jsf-2.2 methodexpression

我几乎是Java / JSF技术的新手,我一直在尝试使用简单的UI来了解Java / JSF世界中的情况。

现在我想将ManagedBean的方法及其包名绑定到CommandButton的actionListener。

示例:

的index.xhtml

...
<h:commandButton actionListener="#{com.acme.myclass.MyMethod}" ...
...

MyClass.java

package com.acme;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;

@ManagedBean
@RequestScoped

public class MyClass {

    public MyClass() {
        // Constructor
    }

    public void MyMethod() {
        // Do some job
    }

}

我尝试将方法绑定为上面给出的示例,但不调用该方法。此外,我在Netbeans的小自动完成窗口中看不到我的包裹。如果我以#{class.method} 格式绑定该方法(如互联网上的所有给定示例),则可以正常工作。

有没有办法实现这个目标?

为什么我需要这样做?

虽然项目越来越大,命名类越来越难。所以,我认为不同包中的相同类名会让生活更轻松。

1 个答案:

答案 0 :(得分:2)

JSF不允许这种动作侦听器绑定,简单。您在JSF世界中唯一的表现是ActionListener接口的独立实现,然后您可以使用它来提供FQN:

  <h:commandButton>
       <f:actionListener type="com.you.YourActionListenerImpl" />
  </h:commandButton>

YourActionListenerImpl将是如前所述的实现ActionListener的类

至于为什么你想要这样做,我认为你夸大了命名的成本 - 它并不那么难。通过Java工件的命名,大规模,庞大的项目相处得很好(例如,查看Spring项目)。