Events 如何使用参数化名称侦听所有Seam上下文事件?
Seam将触发与特定作用域、任务或流程相关的事件,并将作用域、任务或流程的名称附加到事件的末尾 我如何收听同一类型的所有事件 例如,对于任何Events 如何使用参数化名称侦听所有Seam上下文事件?,events,seam,observer-pattern,jbpm,Events,Seam,Observer Pattern,Jbpm,Seam将触发与特定作用域、任务或流程相关的事件,并将作用域、任务或流程的名称附加到事件的末尾 我如何收听同一类型的所有事件 例如,对于任何,我都想听听这样的事件: org.jboss.seam.createProcess.-在创建进程时调用 org.jboss.seam.endProcess.-在进程结束时调用 org.jboss.seam.initProcess.-当进程与对话关联时调用 org.jboss.seam.startTask.-在任务启动时调用 org.jboss.seam.e
,我都想听听这样的事件:
-在创建进程时调用org.jboss.seam.createProcess.
-在进程结束时调用org.jboss.seam.endProcess.
-当进程与对话关联时调用org.jboss.seam.initProcess.
-在任务启动时调用org.jboss.seam.startTask.
-任务结束时调用org.jboss.seam.endTask.
我希望使用@Observer创建观察器或类似的东西,我将在同一个组件中最多听两个事件类。您可以通过使用自己的实现替换Seam的事件类来轻松完成此操作。然后查找以特定字符串开头的事件:
@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事件。在if中,您必须编写super.raiseEvent(…),否则您将获得一个无限循环。被否决,可能看起来有些苛刻,但看到一个新的(ish)会让我感到痛苦用户正在获得代表,以发布应为注释的答案。是,这应为注释comment@SimonGibbs的新用户不能在任何地方发表评论,你需要至少50个声誉才能获得这一特权。