1

我有一个在我的实体上使用侦听器的 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()指令不会导致侦听器的调用。

4

1 回答 1

0

问题可能是在访问由该扩展实现的第一个计算属性时延迟创建扩展实例,例如调用计算属性的 getter 或 setter。

因此,作为一般经验法则,扩展不是创建监听器并将其附加到实体(或组件)实例的好地方,除非这些监听器与此扩展实现的计算属性直接相关,在这种情况下,扩展是显然是创建的。

onCreate如果你总是需要这些监听器,我建议你实现一个生命周期拦截器并在//方法中添加它们(或重新附加它们)onCloneonLoad

于 2015-04-07T17:36:56.943 回答