以Wicket形式显示搜索结果的数量

时间:2011-10-18 09:48:49

标签: java forms search wicket

在我目前的Apache Wicket项目中,我有一个搜索表单,用于查询数据库并在ListView中显示查询结果。搜索输入框与ListView与结果位于同一页面上,并且在调用表单的onSubmit()方法期间,ListView填充了来自DAO的查询结果。

一切正常,但我需要显示搜索结果的数量。我尝试创建一个标签,该标签填充了getList()实例的ListView方法获得的列表的size()方法的值,但没有运气。

感谢您提前提供任何帮助。

1 个答案:

答案 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 }}