如何将bean 的方法与actionListener 中的包绑定?

How to bind a bean's method with package in actionListener?

我是 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 的小自动完成 window 中看不到我的包。如果我以 #{class.method} 格式绑定方法(如互联网上所有给出的示例),它就可以工作。

有办法实现吗?

为什么我需要这样做?

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

JSF 不允许那种 actionlistener 绑定,很简单。与 JSF 世界中的唯一相似之处是 ActionListener 接口的独立实现,然后您可以使用它提供 FQN:

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

其中 YourActionListenerImpl 将是一个 class 实现 ActionListener 如前所述

至于为什么你想这样做,我认为你夸大了命名的成本——这并不难。庞大的、庞大的项目与 Java 工件的命名相处得很好(例如 Spring 项目)。