在我目前的Apache Wicket项目中,我有一个搜索表单,用于查询数据库并在ListView
中显示查询结果。搜索输入框与ListView
与结果位于同一页面上,并且在调用表单的onSubmit()方法期间,ListView
填充了来自DAO的查询结果。
一切正常,但我需要显示搜索结果的数量。我尝试创建一个标签,该标签填充了getList()
实例的ListView
方法获得的列表的size()方法的值,但没有运气。
感谢您提前提供任何帮助。
答案 0 :(得分:3)
根据您构建此表单的方式,您可能只需要执行label.setModelObject(listResults.size())
。没有看到你是怎么做的,很难说出来。
根据您在问题中所说的内容,您可能正在创建标签new Label(labelId, listView.getList().size()
。这不起作用,您在构造时使用常量值设置Label的模型,这是构造时列表的大小。您需要在Model
的{{1}}中获取该值,以使值“动态”。比如,例如,
getObject()
这样,每次页面呈现时,都会调用AbstractReadOnlyModel sizeModel = new AbstractReadOnlyModel(){
public getObject(){
return listView.getList().getSize();
}
}
new Label(labelId, sizeModel);
来检索sizeModel().getObejct()
的值。换句话说,Label
的{{1}}值为常数。
您甚至可以在Label
方法中执行Model
。
由于我对你如何构建这个表单的无知,我会告诉你我该怎么做。 label.setModelObject(list.size())
将使用onSubmit()
检索List
个结果。这将是LoadableDetachableModel
的{{1}}。然后,Model
可以使用ListView
,使用Label
的modelObject来获取其大小。
AbstractReadOnlyModel
ListView
使用LoadableDetachableModel
可以自动分离public class MyForm extends Form {
private LoadableDetachableModel resultsModel;
private IModel searchModel;
public MyForm(){
searchModel = new Model();
TextField searchTextField = new TextField("search", searchModel);
resultsModel = new LoadableDetachableModel(){
protected Object load(){
return myService.get(searchModel.getModelObject());
}
}
ListView lv = new ListView("list", resultsModel){
// ...
}
Label resultsCount = new Label("count", new AbstractReadOnlyModel(){
public Object getObject(){
return ((List) resultsModel.getObject()).size();
}
})
SubmitButton button = new SubmitButton(){
public void onSubmit(){
//... No actions needed, really
}
}
// add's...
}
}
,从而避免整个ListView
结果序列化到Model
}}