Jspresso:集合内容更改时未调用侦听器
Jspresso: Listener not invoked on collection content change
我有一个在我的实体上使用侦听器的 Jspresso 应用程序。问题是当我修改监听的 属性.
时,这个监听器没有被调用
监听器定义如下:
public WagonTransportOrderExtension(final WagonTransportOrder component) {
PropertyChangeListener nbVehiclesListener = new PropertyChangeListener() {
@SuppressWarnings("unchecked")
public void propertyChange(PropertyChangeEvent evt) {
Integer nbVehicles = 0;
Integer oldValue = getComponent().getNbVehiclesPersisted();
for(LoadDetail detail : (Collection<LoadDetail>)evt.getNewValue()) {
nbVehicles += detail.getQuantity();
}
getComponent().setNbVehiclesPersisted(nbVehicles);
getComponent().firePropertyChange(
WagonTransportOrder.NB_VEHICLES_PERSISTED, oldValue, nbVehicles);
}
};
getComponent().addPropertyChangeListener(
WagonTransportOrder.LOAD_DETAILS, nbVehiclesListener);
}
以及此实体的一个简单用例:
WagonTransportOrder wagonTransportOrder = createEntityInstance(WagonTransportOrder)
Vehicle vehicle = createEntityInstance(Vehicle)
vehicle.setVin("00000000000000000")
save(vehicle)
wagonTransportOrder.addToLoadDetails(vehicle)
调试时,addToLoadDetails()
指令不会导致调用侦听器。
问题可能是当访问此扩展实现的第一个计算 属性 时延迟创建扩展实例,例如计算的 属性 的 getter 或 setter 被调用。
因此,根据一般经验,扩展不是创建侦听器并将其附加到实体(或组件)实例的好地方,除非这些侦听器与此扩展实现的计算属性直接相关,其中情况下,显然已创建扩展。
如果你总是需要这些监听器,我建议实现一个生命周期拦截器并将它们添加(或重新附加)在 onCreate
/ onClone
/ onLoad
方法。
我有一个在我的实体上使用侦听器的 Jspresso 应用程序。问题是当我修改监听的 属性.
时,这个监听器没有被调用监听器定义如下:
public WagonTransportOrderExtension(final WagonTransportOrder component) {
PropertyChangeListener nbVehiclesListener = new PropertyChangeListener() {
@SuppressWarnings("unchecked")
public void propertyChange(PropertyChangeEvent evt) {
Integer nbVehicles = 0;
Integer oldValue = getComponent().getNbVehiclesPersisted();
for(LoadDetail detail : (Collection<LoadDetail>)evt.getNewValue()) {
nbVehicles += detail.getQuantity();
}
getComponent().setNbVehiclesPersisted(nbVehicles);
getComponent().firePropertyChange(
WagonTransportOrder.NB_VEHICLES_PERSISTED, oldValue, nbVehicles);
}
};
getComponent().addPropertyChangeListener(
WagonTransportOrder.LOAD_DETAILS, nbVehiclesListener);
}
以及此实体的一个简单用例:
WagonTransportOrder wagonTransportOrder = createEntityInstance(WagonTransportOrder)
Vehicle vehicle = createEntityInstance(Vehicle)
vehicle.setVin("00000000000000000")
save(vehicle)
wagonTransportOrder.addToLoadDetails(vehicle)
调试时,addToLoadDetails()
指令不会导致调用侦听器。
问题可能是当访问此扩展实现的第一个计算 属性 时延迟创建扩展实例,例如计算的 属性 的 getter 或 setter 被调用。
因此,根据一般经验,扩展不是创建侦听器并将其附加到实体(或组件)实例的好地方,除非这些侦听器与此扩展实现的计算属性直接相关,其中情况下,显然已创建扩展。
如果你总是需要这些监听器,我建议实现一个生命周期拦截器并将它们添加(或重新附加)在 onCreate
/ onClone
/ onLoad
方法。