Отображение количества результатов поиска в форме Wicket - PullRequest
0 голосов
/ 18 октября 2011

В моем текущем проекте Apache Wicket у меня есть поисковая форма для запроса базы данных и отображения результатов запроса в ListView.Поле ввода поиска находится на той же странице, что и ListView с результатами, и что ListView заполняется результатами запроса из DAO во время вызова метода onSubmit () формы.

Все отлично работает, но мне нужно отобразить количество результатов поиска.Я пытался создать метку, которая заполнена значением метода size () списка, полученного методом getList() экземпляра ListView, но безуспешно.

Спасибо за любую помощьзаранее.

1 Ответ

3 голосов
/ 18 октября 2011

В зависимости от того, как вы создали эту форму, вам может потребоваться только label.setModelObject(listResults.size()).Трудно сказать, не видя, как ты это делаешь.

Судя по тому, что вы говорите в своем вопросе, возможно, вы создаете свой ярлык, как этот new Label(labelId, listView.getList().size().Это не будет работать, вы устанавливаете Модель метки во время создания с постоянным значением, это размер списка во время создания.Вам нужно получить это значение внутри Model getObject(), чтобы сделать значение «динамическим».Как, например,

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

При этом каждый раз при визуализации страницы будет вызываться sizeModel().getObejct() для получения значения для Label.Таким образом, Label получил Model с постоянным значением.

Вы можете даже сделать label.setModelObject(list.size()) в методе onSubmit().

Из-за моего невежествакак вы построили эту форму, я покажу вам, как мне это сделать.List результатов будет получено с LoadableDetachableModel.Это было бы Model из ListView.Тогда Label может иметь, например, AbstractReadOnlyModel, который использует ListView s modelObject, чтобы получить его размер.

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

Использование LoadableDetachableModel для ListView имеет то преимущество, что автоматически отсоединяет Model и, следовательно, позволяет избежать всего List результатов для сериализации вSession.

...