Java Wicket ListView未刷新
我正在使用ApacheWicket迈出第一步,遇到了以下问题。我有一个Java Wicket ListView未刷新,java,wicket,Java,Wicket,我正在使用ApacheWicket迈出第一步,遇到了以下问题。我有一个ListView,它在条目旁边显示一个“delete”链接。单击“删除”链接时,列表项表示的实体将从数据库中删除,但列表本身不会更新,直到我在浏览器中手动重新加载页面 IModel<List<SampleEntity>> sampleEntityListModel = new LoadableDetachableModel<List<SampleEntity>>() {
ListView
,它在条目旁边显示一个“delete”链接。单击“删除”链接时,列表项表示的实体将从数据库中删除,但列表本身不会更新,直到我在浏览器中手动重新加载页面
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());
}
});
}
};
IModel sampleEntityListModel=新的LoadableDetachableModel(){
@凌驾
受保护列表加载(){
返回mSampleEntityBA.findAll();
}
};
mListview=新列表视图(“列表视图”,sampleEntityListModel){
@凌驾
受保护的无效填充项(最终列表项){
添加(新标签(“listlabel”),新属性模型(item.getModelObject(),
"文本);;
添加(新链接(“deleteLink”,item.getModel()){
@凌驾
公共void onClick(){
mSampleEntityBA.delete(item.getModelObject());
}
});
}
};
您可能想要一个AjaxLink而不是该链接,然后您必须使用所描述的策略刷新列表,可能会对wiki的Wicket 1.3代码而不是1.4代码进行一些调整
但您最好使用不同的中继器,例如RefreshingView或DataView。这里有一些分类中继器的例子。虽然它们都不是您想要的,但是查看这些代码可能会有所帮助。看起来问题在于您的mSampleEntityBA.findAll();正在返回不正确的数据。如果看不到更多代码,很难提供帮助
另一方面,在处理数据库支持的列表时,您确实应该使用DataView。您可能还希望从wiQuery项目而不是DataView签出JQGrid。调用onClick时,item.getModelObject()从sampleEntityListModel中提取,sampleEntityListModel反过来调用mSampleEntityBA.findAll()。sampleEntityListModel的model对象将在请求周期中被缓存一段时间(直到它被分离——这通常是您想要的),并且不知道对delete()的调用 为了刷新sampleEntityListModel,请在删除之后添加一个sampleEntityListModel.detach()调用(sampleEntityListModel必须是最终的,但这不会导致序列化任何额外的状态)。这将导致模型在请求周期稍后呈现列表视图时获取一组新的数据