このフォームをどのように作成したかによって、label.setModelObject(listResults.size())
する必要があります。どのようにあなたがそれをやっているのかを見ずに話すのは難しいです。
質問でお伝えしているとおり、恐らくあなたはこのラベルnew Label(labelId, listView.getList().size()
を作成しています。これはうまくいきません。建設時にラベルのモデルを一定値で設定しています。つまり、建設時のリストのサイズです。値を "dynamic"にするには、Model
のgetObject()
の値を取得する必要があります。このと同じように、例えば、
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
で取得されます。これはListView
のModel
になります。次に、Label
は、AbstractReadOnlyModel
を持つことができ、そのサイズを得るためにmodelObjectを使用します。 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...
}
}
は自動的にModel
を取り外し、そのためSession
にシリアライズ取得する結果の全体List
を回避するという利点を有します。
使用しているコードの一部を表示できますか? –
いくつかのコードを提供できますか?例えば。あなたがラベルを作る場所を死ぬ? – bert