7.9. コンポーネント駆動イベント


Seam コンポーネント同士は互いのメソッドを呼び出して通信します。 ステートフルコンポーネントは監視側または監視可能パターンを実装することもできます。 ただし、より疎結合な通信を有効にするために Seam には コンポーネント駆動イベント が備わっています。
イベントリスナー (監視側) を components.xml に指定します。
<components> 
  <event type="hello"> 
    <action execute="#{helloListener.sayHelloBack}"/> 
    <action execute="#{logger.logHello}"/> 
  </event> 
</components>
Copy to Clipboard Toggle word wrap
ここでは イベントタイプ は任意の文字列です。
イベントが発生すると、 そのイベント用に登録されたアクションが components.xml で出現する順番に従って呼び出されます。 イベントを発生させるために Seam は組み込みコンポーネントを提供します。
@Name("helloWorld") 
public class HelloWorld { 
    public void sayHello() { 
        FacesMessages.instance().add("Hello World!"); 
        Events.instance().raiseEvent("hello"); 
    } 
}
Copy to Clipboard Toggle word wrap
また、 以下のようにアノテーションを使うことも可能です。
@Name("helloWorld") 
public class HelloWorld { 
    @RaiseEvent("hello") 
    public void sayHello() { 
        FacesMessages.instance().add("Hello World!"); 
    } 
}
Copy to Clipboard Toggle word wrap
このイベント生成側はイベント消費側には依存しません。 イベントリスナーはまったく生成側に依存関係を持つことなく実装することができます。
@Name("helloListener") 
public class HelloListener { 
    public void sayHelloBack() { 
        FacesMessages.instance().add("Hello to you too!"); 
    } 
}
Copy to Clipboard Toggle word wrap
上記の components.xml で定義されたメソッドバインディングはイベントを消費側にマッピングします。 アノテーションを使用してこれを行うこともできます。
@Name("helloListener") 
public class HelloListener { 
    @Observer("hello") 
    public void sayHelloBack() { 
        FacesMessages.instance().add("Hello to you too!"); 
    } 
}
Copy to Clipboard Toggle word wrap
コンポーネント駆動のイベントを知っている方なら、 なぜイベントオブジェクトについて今まで言及してこなかったか疑問に思われるかもしれません。 Seam ではイベントオブジェクトはイベント生成側とリスナー間で状態を伝播する必要がありません。 状態は Seam コンテキストで保持されコンポーネント間で共有されます。 ただし、 イベントオブジェクトを渡したければ次のようにすることも可能です。
@Name("helloWorld") 
public class HelloWorld { 
    private String name; 
    public void sayHello() { 
        FacesMessages.instance().add("Hello World, my name is #0.", name); 
        Events.instance().raiseEvent("hello", name); 
    } 
}
Copy to Clipboard Toggle word wrap
@Name("helloListener") 
public class HelloListener { 
    @Observer("hello") 
    public void sayHelloBack(String name) { 
        FacesMessages.instance().add("Hello #0!", name); 
    } 
}
Copy to Clipboard Toggle word wrap
トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

Theme

© 2026 Red Hat