2009-02-16 36 views
2

Seam将触发与特定范围,任务或过程相关的different kinds of events,并将范围,任务或过程的名称附加到事件的结尾。如何使用参数化名称来侦听所有Seam上下文事件?

如何聆听某一类型的所有事件?

E.g.对于任何<name>我想监听事件,如这些:

  • org.jboss.seam.createProcess.<name> - 创建
  • org.jboss.seam.endProcess.<name>过程中,当叫 - 调用的时候,过程结束
  • org.jboss.seam.initProcess.<name> - 当过程被称为关联与对话
  • org.jboss.seam.startTask.<name> - 当任务开始
  • org.jboss.seam.endTask.<name>称为 - 当任务结束叫

我需要这样做尽管不知道有效的名称前面的列表... :-(

我希望可以用@Observer创建观察者,或者类似的东西,和我最多可以听同一组件中的两个事件类。

回答

4

您可以轻松地将Seam的Events类替换为您自己的实现。然后寻找那些提出与特定字符串开头的事件:

@Scope(ScopeType.STATELESS) 
@BypassInterceptors 
@Name("org.jboss.seam.core.events") 
@Install(precedence=APPLICATION) 
public class Events extends org.jboss.seam.core.Events 
{ 
    @Override 
    public void raiseEvent(String type, Object... parameters) 
    { 
     super.raiseEvent(type, parameters); 

     if (type.startsWith("org.jboss.seam.createProcess")) 
     { 
      super.raiseEvent("org.jboss.seam.createProcess", parameters); 
     } 
     //etc. 
    } 
} 

您现在可以看到“org.jboss.seam.createProcess”让所有的CreateProcess事件。

2

在if里面,你必须编写super.raiseEvent(...)否则你会得到一个无限循环。

+0

谢谢!我已经更新了我的回答 – mtpettyp 2009-07-27 22:23:11

相关问题