<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    鷹翔宇空

    學習和生活

    BlogJava 首頁 新隨筆 聯系 聚合 管理
      110 Posts :: 141 Stories :: 315 Comments :: 1 Trackbacks

    今晚看到jboss seam 的 組件驅動的事件,感覺真是太棒了。從它的中文手冊中摘抄如下:

    Seam組件可以通過方法間簡單的調用相互影響。狀態組件甚至實現 Observer/Observable 模式。 但在組件直接調用彼此方法的時候,為了使組件在一個比可能存在的更加松耦合的方式下相互作用,Seam提供了 組件驅動事件。
    我們在 components.xml 里指定了事件監聽器(觀察者)。
    <components>
    <event type="hello">
    <action execute="#{helloListener.sayHelloBack}"/>
    <action execute="#{logger.logHello}"/>
    </event>
    </components>
    在這里,event type 是任意的字符串。
    事件發生時,該事件已經注冊過的動作將按照它們在 components.xml 中出現的順序被依次調用。 組件如何發起事件?Seam為此提供了一個內置的組件。
    @Name("helloWorld")
    public class HelloWorld {
    public void sayHello() {
    FacesMessages.instance().add("Hello World!");
    Events.instance().raiseEvent("hello");
    }
    }
    或者你可以使用注解。
    @Name("helloWorld")
    public class HelloWorld {
    @RaiseEvent("hello")
    public void sayHello() {
    FacesMessages.instance().add("Hello World!");
    }
    }
    注意這個事件產生器沒有依賴任何事件消費者。事件監聽器現在可以完全不依賴于產生器而實現:
    @Name("helloListener")
    public class HelloListener {
    public void sayHelloBack() {
    FacesMessages.instance().add("Hello to you too!");
    }
    }
    上述在 components.xml中定義的方法綁定關心把事件映射到消費者去。 如果你不喜歡 components.xml 文件中的那一套,可以用注解來替代:
    @Name("helloListener")
    public class HelloListener {
    @Observer("hello")
    public void sayHelloBack() {
    FacesMessages.instance().add("Hello to you too!");
    }
    }
    你可能想知道為什么在這個討論中沒有提到關于任何事件對象的東西。 在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);
    }
    }
    @Name("helloListener")
    public class HelloListener {
    @Observer("hello")
    public void sayHelloBack(String name) {
    FacesMessages.instance().add("Hello #0!", name);
    }
    }
    posted on 2008-03-25 22:49 TrampEagle 閱讀(1209) 評論(0)  編輯  收藏 所屬分類: 技術文摘
    主站蜘蛛池模板: 国产福利在线免费| 人妻无码一区二区三区免费| 免费无码又爽又刺激毛片| 久久久婷婷五月亚洲97号色| 久操免费在线观看| 亚洲成色在线影院| 99久久人妻精品免费二区| 亚洲综合日韩中文字幕v在线| 最近中文字幕高清免费中文字幕mv | 精品乱子伦一区二区三区高清免费播放| 国产一级高清视频免费看| 美女露隐私全部免费直播| 免费永久在线观看黄网站| 九九视频高清视频免费观看| 亚洲一区二区三区香蕉| 18禁超污无遮挡无码免费网站 | 亚洲无线观看国产精品| 在线看片免费人成视频播| 亚洲今日精彩视频| 四虎永久在线观看免费网站网址| 中国china体内裑精亚洲日本| 国产无遮挡吃胸膜奶免费看视频| 欧洲乱码伦视频免费国产| 亚洲av无码av制服另类专区| 999在线视频精品免费播放观看| 亚洲av第一网站久章草| 国产成人亚洲综合| 91av视频免费在线观看| 亚洲色无码国产精品网站可下载| 亚洲国产精品成人久久蜜臀 | 免费国产成人高清在线观看网站| 久久亚洲精品国产亚洲老地址| 免费在线一级毛片| 香港a毛片免费观看| 亚洲第一成年网站视频| 亚洲色精品vr一区二区三区| 69堂人成无码免费视频果冻传媒| 黄网站在线播放视频免费观看| 亚洲视频在线一区| 日韩a级毛片免费视频| 免费观看男人吊女人视频|