代码之家  ›  专栏  ›  技术社区  ›  Simon Gibbs

如何使用参数化名称侦听所有Seam上下文事件?

  •  2
  • Simon Gibbs  · 技术社区  · 17 年前

    接缝会着火 different kinds of events 与特定范围、任务或流程相关,并将范围、任务或流程的名称附加到事件末尾。

    我如何收听同一类型的所有事件?

    例如,对于任何 <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来创建Observer,或者类似的东西,我将在同一个组件中最多听两个事件类。

    2 回复  |  直到 17 年前
        1
  •  4
  •   mtpettyp    17 年前

    @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
  •  2
  •   Sylvain Sylvain    17 年前

    在if内部,必须编写super.raiseEvent(…),否则将得到一个无限循环。