【发布时间】: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 时才会调用它。如果它不会被渲染,就没有理由填充它。