Java Wicket ListView未刷新

Java Wicket ListView未刷新,java,wicket,Java,Wicket,我正在使用ApacheWicket迈出第一步,遇到了以下问题。我有一个ListView,它在条目旁边显示一个“delete”链接。单击“删除”链接时,列表项表示的实体将从数据库中删除,但列表本身不会更新,直到我在浏览器中手动重新加载页面 IModel<List<SampleEntity>> sampleEntityListModel = new LoadableDetachableModel<List<SampleEntity>>() {

我正在使用ApacheWicket迈出第一步,遇到了以下问题。我有一个
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必须是最终的,但这不会导致序列化任何额外的状态)。这将导致模型在请求周期稍后呈现列表视图时获取一组新的数据