2

Seam 将触发与特定范围、任务或流程相关的不同类型的事件,并将范围、任务或流程的名称附加到事件的末尾。

如何监听一个类型的所有事件?

例如,对于任何<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

2 回答 2

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 事件。

于 2009-05-22T18:37:26.337 回答
2

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

于 2009-07-27T15:46:43.323 回答