我几乎是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} 格式绑定该方法(如互联网上的所有给定示例),则可以正常工作。
有没有办法实现这个目标?
为什么我需要这样做?
虽然项目越来越大,命名类越来越难。所以,我认为不同包中的相同类名会让生活更轻松。
答案 0 :(得分:2)
JSF不允许这种动作侦听器绑定,简单。您在JSF世界中唯一的表现是ActionListener
接口的独立实现,然后您可以使用它来提供FQN:
<h:commandButton>
<f:actionListener type="com.you.YourActionListenerImpl" />
</h:commandButton>
YourActionListenerImpl
将是如前所述的实现ActionListener
的类
至于为什么你想要这样做,我认为你夸大了命名的成本 - 它并不那么难。通过Java工件的命名,大规模,庞大的项目相处得很好(例如,查看Spring项目)。