2011-10-18 6 views
0

私の現在のApache Wicketプロジェクトでは、データベースを照会し、照会結果をListViewに表示するための検索フォームがあります。検索入力ボックスは結果と共にListViewと同じページにあり、ListViewはフォームのonSubmit()メソッドの呼び出し中にDAOからのクエリ結果で満たされます。Wicketフォームで検索結果の数を表示

すべて正常に動作しますが、検索結果の数を表示する必要があります。私はListViewインスタンスのgetList()メソッドによって得られたリストのsize()メソッドの値でいっぱいですが、運がないラベルを作成しようとしました。

ありがとうございました。

+0

使用しているコードの一部を表示できますか? –

+0

いくつかのコードを提供できますか?例えば。あなたがラベルを作る場所を死ぬ? – bert

答えて

3

このフォームをどのように作成したかによって、label.setModelObject(listResults.size())する必要があります。どのようにあなたがそれをやっているのかを見ずに話すのは難しいです。

質問でお伝えしているとおり、恐らくあなたはこのラベルnew Label(labelId, listView.getList().size()を作成しています。これはうまくいきません。建設時にラベルのモデルを一定値で設定しています。つまり、建設時のリストのサイズです。値を "dynamic"にするには、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())とすることもできます。

このフォームをどのように作成したかについて私の知らないうちに、私はこれをどうやって行うのかをお見せしましょう。結果のListLoadableDetachableModelで取得されます。これはListViewModelになります。次に、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を回避するという利点を有します。

関連する問題