1
我有一个Jspresso应用程序在我的实体上使用侦听器。问题在于,当我修改侦听属性时,不会调用此侦听器。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()
指令不导致invokation的听众。
该解决方案工作正常,但副作用是监听器在实体加载时触发,并不总是像您所说的那样需要。 我选择实现一个处理器而不是这种情况下的侦听器,因为它使更多的感知只有当集合被更改时才更改我的nbVehiclesPersisted。 因为它不完全是一个计算的属性,而是一个并非总是使用的计算属性的非规范化。 – Dealus
连接时不应调用监听器。你看到不同的行为?使用处理器绝对是一个严肃的选择。 –