在JSF2中,我必须在支持bean实现自定义接口时定义所有方法

时间:2013-01-22 11:22:18

标签: jsf-2

在这里寻求帮助和建议。我的环境是JSF2。

我有许多表格都需要上传文件。我想使用常见的模式弹出对话框来处理文件上传。

每个表单都有一个不同的支持bean,我希望它们都能实现支持文件上载操作所需的方法。

我编写了以下接口来定义每个bean必须实现的方法以支持此文件上载

public interface ComponentUploader
{

void uploadComponentClicked(ActionEvent e);

void handleFileUpload(FileUploadEvent event);

List<UploadedFile> getUploadedFiles();

void saveUploadComponentClicked();
}

支持bean类然后实现此接口...

public class SupplierBean  implements ComponentUploader
{
    public void handleFileUpload(FileUploadEvent event) {  
    ...
    } 
    public void uploadComponentClicked(ActionEvent e)
    {
    ...
    }
    public void saveUploadComponentClicked()
    {
    ...
    }
    public List<UploadedFile> getUploadedFiles()
    {
    ...
    }

    //other public methods...
    public void initialise()
    {
    ...
    }

现在,每个支持bean都有其他公共方法,例如initialise(),但是实现ComponentUploader接口不需要这些方法。

虽然以上编译正确,但当我尝试从我的网页上的actionListener调用initialise方法时(在JBOSS AS 7中),我得到Method Not Found错误;

Caused by: javax.el.MethodNotFoundException: Method not found: Proxy for view class: com.vesey.searchpoint.interfaces.ComponentUploader of EJB: SupplierBean.initialise()

我不明白为什么如果没有在接口中定义,我无法在辅助bean上调用公共方法。是因为JSF将接口解释为它的业务接口的定义吗?

这里的正确方法是什么?我想有几个bean都支持ComponentUploader接口,但每个bean都有自己的可调用公共方法。我应该看抽象类而不是接口。

由于 富

1 个答案:

答案 0 :(得分:0)

我认为你的actionListener签名错误,问题与接口无关。 你需要一些方法签名,如:

public void initialise(ActionEvent event)

也许您有一些未在代码示例中显示的bean配置?