我目前的设置是JBoss 4.2.3.GA上的JBoss Seam 2.2。
我有两只豆这样:
@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());
}
}
}
问题在于,调用recordSuccess()
selectedMailing
始终为null
。
作为一种解决方法,我在调用可能触发我的事件的任何代码之前手动在对话上下文中设置selectedMailing
,然后使用@In(required=false)
注释我的字段,以便在{{1}之前再次注入它}} 叫做。但是有没有更优雅的解决方案(保持脱钩完好无损)?为什么不重用调用bean来处理事件?