Как мне прослушать все контекстуальные события Seam с параметризованными именами?

StackOverflow https://stackoverflow.com/questions/553157

Вопрос

Шов будет гореть различные виды мероприятий которые относятся к определенным областям, задачам или процессам и добавляет название области, задачи или процесса в конец события.

Как мне прослушать все события определенного типа?

Например.для любого <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 или чего-то подобного, и я буду прослушивать до двух классов событий в одном компоненте.

Это было полезно?

Решение

Вы можете легко сделать это, заменив класс Events от 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(...), иначе вы получите бесконечный цикл.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top