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 で) 展開されている場合、Web ページで 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 に答える