我正在使用Apache Wicket迈出第一步并遇到以下问题。我有ListView
,在其条目旁边显示“删除”链接。单击删除链接时,列表项表示的实体将从数据库中删除,但在我在浏览器中手动重新加载页面之前,列表本身不会更新。
IModel<List<SampleEntity>> sampleEntityListModel = new LoadableDetachableModel<List<SampleEntity>>() {
@Override
protected List<SampleEntity> load() {
return mSampleEntityBA.findAll();
}
};
mListview = new ListView<SampleEntity>("listview", sampleEntityListModel) {
@Override
protected void populateItem(final ListItem<SampleEntity> item) {
item.add(new Label("listlabel", new PropertyModel<String>(item.getModelObject(),
"text")));
item.add(new Link<SampleEntity>("deleteLink", item.getModel()) {
@Override
public void onClick() {
mSampleEntityBA.delete(item.getModelObject());
}
});
}
};
答案 0 :(得分:3)
当调用onClick时,item.getModelObject()从sampleEntityListModel中拉出,而sampleEntityListModel又调用mSampleEntityBA.findAll()。 sampleEntityListModel的模型对象将在请求周期的持续时间内缓存(直到它被分离 - 这通常是你想要的)并且不知道对delete()的调用。
为了刷新sampleEntityListModel,在删除之后添加一个sampleEntityListModel.detach()调用(必须使sampleEntityListModel成为final,但这不会导致任何额外的状态被序列化)。这将导致模型在请求周期中稍后呈现列表视图时获取一组新数据。
答案 1 :(得分:0)
你可能想要一个AjaxLink而不是那个Link,然后你必须使用here所描述的策略刷新列表,可能会因wiki有Wicket 1.3代码而不是1.4而调整一下
但是使用不同的转发器(例如RefreshingView或DataView)也可能会更好。有一些各种中继器here的例子。虽然它们都不是您正在寻找的,但查看该代码可能有所帮助。
答案 2 :(得分:0)
看起来问题是你的mSampleEntityBA.findAll();返回不正确的数据。没有看到更多代码就很难提供帮助。
另外,在使用数据库支持的列表时,您应该真正使用DataView。
答案 3 :(得分:0)
您可能还想从wiQuery项目而不是DataView中查看JQGrid。