2011-10-18 26 views
0

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

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

感谢您提前给予任何帮助。

+0

你能展示一些你使用的代码吗? –

+0

你能提供一些代码吗?例如。你构建标签的地方? – bert

回答

3

根据您建立此表单的方式,您可能只需要执行label.setModelObject(listResults.size())。很难说没有看到你怎么做。

通过你在你的问题中说的话,可能你正在创建你的标签,像这样new Label(labelId, listView.getList().size()。这是行不通的,您在施工时将标签的模型设置为恒定值,这是施工时列表的大小。您需要在ModelgetObject()中获得该值,以使值为“动态”。就像,例如,

AbstractReadOnlyModel sizeModel = new AbstractReadOnlyModel(){ 
    public getObject(){ 
     return listView.getList().getSize(); 
    } 
} 
new Label(labelId, sizeModel); 

有了这个,每一个页面呈现的时候,sizeModel().getObejct()将被调用来检索Label值。以另一种方式,Label得到了一个恒定值的Model

你甚至可以在onSubmit()方法中做label.setModelObject(list.size())

从我对你如何建立这种形式的无知,我会告诉你我将如何做到这一点。结果的List将通过LoadableDetachableModel检索。那将是ListViewModel。然后,Label可以具有例如使用ListView的modelObject来获得其大小的AbstractReadOnlyModel

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一个LoadableDetachableModel具有自动拆卸Model,因此避免结果的整个List得到序列化为Session优势。