Java 以Wicket表单显示搜索结果的数量

Java 以Wicket表单显示搜索结果的数量,java,forms,search,wicket,Java,Forms,Search,Wicket,在我当前的ApacheWicket项目中,我有一个搜索表单,用于查询数据库并在列表视图中显示查询结果。搜索输入框与带有结果的ListView位于同一页面上,并且在调用表单的onSubmit()方法期间,ListView将填充来自DAO的查询结果 一切正常,但我需要显示搜索结果的数量。我试图创建一个标签,其中填充了由ListView实例的getList()方法获得的列表的size()方法的值,但没有成功 感谢您事先提供的帮助。根据您构建此表单的方式,您可能只需要执行label.setModelOb

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

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


感谢您事先提供的帮助。

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

根据您在问题中所说的,您可能正在创建这样的标签
newlabel(labelId,listView.getList().size())
。这不起作用,你在构建时用一个常量值设置标签的模型,这是构建时列表的大小。你需要在
模型
getObject()
中获取该值,使该值成为“动态”值。例如

AbstractReadOnlyModel sizeModel = new AbstractReadOnlyModel(){
    public getObject(){
        return listView.getList().getSize();
    }
}
new Label(labelId, sizeModel);
这样,每次页面呈现时,都会调用
sizeModel().getObejct()
来检索
标签的值。通过这种方式,
标签得到了一个具有常量值的
模型

您甚至可以在
onSubmit()
方法中执行
label.setModelObject(list.size())

由于我不知道您是如何构建此表单的,我将向您展示我将如何做到这一点。结果的
列表将使用
LoadableDetachableModel
检索。这将是
ListView
Model
。然后,
标签
可以有一个
AbstractReadOnlyModel
,我们可以使用它对
ListView
s model对象进行排序以获取其大小

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...
    }
}

列表视图使用
具有自动分离
模型
的优点,因此避免将整个
列表
的结果序列化到
会话中

根据您构建此表单的方式,您可能只需要执行
label.setModelObject(listResults.size())
。不知道你是如何做到的,很难判断

根据您在问题中所说的,您可能正在创建这样的标签
newlabel(labelId,listView.getList().size())
。这不起作用,你在构建时用一个常量值设置标签的模型,这是构建时列表的大小。你需要在
模型
getObject()
中获取该值,使该值成为“动态”值。例如

AbstractReadOnlyModel sizeModel = new AbstractReadOnlyModel(){
    public getObject(){
        return listView.getList().getSize();
    }
}
new Label(labelId, sizeModel);
这样,每次页面呈现时,都会调用
sizeModel().getObejct()
来检索
标签的值。通过这种方式,
标签得到了一个具有常量值的
模型

您甚至可以在
onSubmit()
方法中执行
label.setModelObject(list.size())

由于我不知道您是如何构建此表单的,我将向您展示我将如何做到这一点。结果的
列表将使用
LoadableDetachableModel
检索。这将是
ListView
Model
。然后,
标签
可以有一个
AbstractReadOnlyModel
,我们可以使用它对
ListView
s model对象进行排序以获取其大小

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...
    }
}

列表视图
使用a的优点是自动分离
模型
,从而避免将整个
列表
结果序列化到
会话

中。您可以显示您正在使用的一些代码吗?您可以提供一些代码吗?例如,构建标签的模具位置?Can请展示您正在使用的一些代码?您能提供一些代码吗?例如,您构建标签的模具位置?