1

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

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

例子:

索引.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}格式绑定方法(如互联网上所有给出的示例),它就可以工作。

有没有办法做到这一点?

为什么我需要这样做?

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

4

1 回答 1

2

JSF 不允许这种动作监听器绑定,很简单。与您在 JSF 世界中所拥有的唯一相似之处是ActionListener接口的独立实现,然后您可以使用它提供 FQN:

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

如前所述,将在哪里YourActionListenerImpl实现一个类ActionListener

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

于 2015-05-26T17:54:45.627 回答