1

我当前的设置是 JBoss 4.2.3.GA 上的 JBoss Seam 2.2。

我有两个像这样的 Bean:

@Name("mailingManager")
@Scope(ScopeType.PAGE)
public class MailingMgr {
  private Mailing selectedMailing;

  @Observer("mailing.letter.success")
  public void recordSuccess(final Object arg) {
    if (null != selectedMailing) { // store arg }
  }

  public void send() {
    selectedMailing = new Mailing();
    if ('EMAIL' == determineType()) {
      EmailSender mailer = (EmailSender) Component.getInstance(EmailSender.class);
      mailer.send(getAddresses());
    }
    // ... more options
  }
}

@Name("emailSender")
@Scope(ScopeType.PAGE)
public class EmailSender {
  public void send(final Set<String> addresses) {
    for (String addr : addresses) {
      // ... create a mail
      Events.instance().raiseEvent("mailing.letter.success", getGeneratedMail());
    }
  }
}

问题是 when总是recordSuccess()被调用。selectedMailingnull

作为一种解决方法,我selectedMailing在调用任何可能触发我的事件的代码之前手动设置对话上下文,然后在调用之前对我的字段进行注释@In(required=false)以再次注入它recordSuccess。但是有没有更优雅的解决方案(保持解耦不变)?为什么不重用调用 bean 来处理事件?

4

0 回答 0