【发布时间】:2013-09-30 13:03:50
【问题描述】:
我正在寻找一种将某种参数添加到使用 CDI 事件机制传播的事件的方法。
我知道对于我的示例,我可以创建不同的事件,但我正在寻找一种方法来重用相同的事件,但使用不同的参数。然后用这个事件参数注解一些方法,以便在事件触发时只调用这个方法。
以下示例不起作用,但说明了我的意图。这有可能吗?
//custom event class
public class NotifyChange {
}
//change the model and notify the view
public class MyPresenter {
@Inject
private Events<NotifyChange> events;
public void updateUser() {
//change some user settings
events.fire(new NotifyChange("user")); //that what I'm somehow looking for
}
public void updateCustomer() {
//change some customer settings
events.fire(new NotifyChange("customer"));
}
}
//change the view according to events
public class MyView {
void listenUserChange(@Observes NotifyChange("user") evt) {
//update UI
}
void listenCustomerChange(@Observes NotifyChange("customer") evt) {
//update UI
}
}
【问题讨论】:
-
我相信这可以通过资格赛来完成。请参阅specs,第 10 章“事件”并阅读有关限定符的信息。
-
阅读 te jee6 教程中的账单支付示例:docs.oracle.com/javaee/6/tutorial/doc/gkhpa.html 它在 PaymentEvent 事件中定义了一个 paymentOption 属性。
-
@DwB 这不是我想要的。该文档建议为每个事件创建不同的注释以在它们之间有所不同。我正在寻找一种方法来避免这种情况。
标签: java jakarta-ee vaadin cdi