首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Jspresso:在集合内容更改时未调用侦听器

Jspresso:在集合内容更改时未调用侦听器
EN

Stack Overflow用户
提问于 2015-04-07 13:01:34
回答 1查看 66关注 0票数 1

我有一个Jspresso应用程序,它使用实体上的侦听器。问题是,当我修改监听属性时,不会调用此侦听器。

以下是侦听器定义:

代码语言:javascript
复制
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); 
}

以及这个实体的一个简单用例:

代码语言:javascript
复制
WagonTransportOrder wagonTransportOrder = createEntityInstance(WagonTransportOrder)

Vehicle vehicle = createEntityInstance(Vehicle)
vehicle.setVin("00000000000000000")
save(vehicle)
wagonTransportOrder.addToLoadDetails(vehicle)

调试此命令时,addToLoadDetails()指令不会导致侦听器的调用。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-04-07 17:36:56

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

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29492314

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档