1

在这里寻求帮助和建议。我的环境是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 接口所必需的。

虽然上述编译正确,但在部署(在 JBOSS AS 7 中)时,当我尝试从网页上的 actionListener 调用初始化方法时,出现 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 解释为它的业务接口的定义吗?

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

谢谢丰富

4

1 回答 1

0

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

public void initialise(ActionEvent event)

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

于 2013-01-22T12:19:19.547 回答