我有一个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()指令不会导致侦听器的调用。
发布于 2015-04-07 17:36:56
问题可能是,当访问由该扩展实现的第一个计算属性(例如,调用getter或计算属性的setter )时,将延迟创建扩展实例。
因此,作为一般的经验规则,扩展并不是创建侦听器并将其附加到实体(或组件)实例的好地方,除非这些侦听器与该扩展实现的计算属性直接相关,在这种情况下,扩展显然是创建的。
如果您总是需要这些侦听器,我建议实现一个生命周期拦截器,并在onCreate / onClone / onLoad方法中添加它们(或重新附加它们)。
https://stackoverflow.com/questions/29492314
复制相似问题