ここでヘルプとアドバイスを探しています。私の環境は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 が必要ですが、それぞれに独自の呼び出し可能なパブリック メソッドもあります。インターフェイスの代わりに抽象クラスを見ているべきですか?
ありがとうリッチ