【问题标题】:Data View is not populated in wicket7wicket7 中未填充数据视图
【发布时间】:2018-04-23 17:03:37
【问题描述】:

我已经实现了下面的重复视图代码

DataView documents = new DataView("documents", dataProvider, new Long(20)) {
   @Override
   protected void populateItem(Item item) {
   //do some code
};

当我调试代码时,调试点不在 populateItem 方法内部,而 dataprovider 具有文档列表并实现 Idataprovider 接口,因此没有填充数据。

我们已经将应用程序从 wicket 1.3 移到 1.7 之后,我们遇到了这个问题。

我不知道为什么会这样。

【问题讨论】:

  • 一个原因可能是 DataView 本身或其父级不可见。
  • 能否请您告诉我调用dataview构造函数填充Item(Item item)后的流程。
  • @martin-g 如何取决于数据视图本身或父级的可见性。如果调用构造函数后我没有错,它将调用 populateoverride 方法。
  • @martin-g 我已经用更多信息更新了我的问题。我们已将 wicket 从 1.3 迁移到 1.7
  • populateItem() 在渲染时被调用。这可能比施工时间晚得多。将 dataView 添加到父容器(例如网页)后,Wicket 将调用 dataView.onInitialize()。稍后,当完整的组件树完全构建时,Wicket 将调用 Page#render(),这将为所有子级递归调用 #render()。那时 dataView.populateItem() 将被调用。但只有当 dataView.isVisible() 返回 true 时才会调用它。如果它不会被渲染,就没有理由填充它。

标签: java wicket wicket-7


【解决方案1】:

经过这么多调试,我得到了解决方案。问题是检票口迁移。

之前我们使用的是 wicket 1.3,在这个 IDataProvider 中使用了 Iterator<? extends T> iterator(int first, int count);,现在 wicket 1.7 更改为 Iterator<? extends T> iterator(long first, long count);,因此我们使用 return null; 值覆盖此方法,这就是我们在数据提供程序中获得 null 的原因。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-10-10
    • 1970-01-01
    • 2015-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多