Передача параметров в DAO для получения отфильтрованного результата в модели калитки - PullRequest
0 голосов
/ 03 апреля 2012

Я принимаю даты из формы калитки - теперь я хочу запросить у моего объекта DAO даты и получить результат фильтров. Итак, вопрос в том, как я могу передать параметры в моделях? или я могу передать параметры в модели? Модель по умолчанию вызывает метод getObject (), который не может принимать никаких параметров: и если я использую модель, я не могу вызвать другой метод, который я создал (getByDates (startDate, endDate)) Каков наилучший способ передать параметры в DAO и показать результат в интерфейсе? например. Поставщик данных / модели и т.д ...

      final  AbstractReadOnlyModel<List<LogParsed>> listModel =  new  AbstractReadOnlyModel<List<LogParsed>>()
        {
            @Override
            public List<LogParsed> getObject() {
                // TODO Auto-generated method stub
                return logParsedDao.findAll();
            }

            public List<SyslogParsed> getObject(Date startDate, Date endDate) {
                // TODO Auto-generated method stub
                return logParsedDao.findByDates(startDate, endDate);
            }
        };

Ответы [ 2 ]

4 голосов
/ 03 апреля 2012

Обычно, если даты не являются частью модели вашего домена, а скорее элементами, которые вам нужны в пользовательском интерфейсе, вы можете сделать их частью своей страницы, панели или формы, а затем ссылаться на них в своем анонимном внутреннем классе:

class MyPage extends Page {
    private Date startDate;
    private Date endDate;

    public MyPage() {
        Form form = new Form("form"){ ... submit logic etc ...};
        add(form);
        form.add(new DateField("startDate", new PropertyModel<Date>(this, "startDate")));
        form.add(new DateField("endDate", new PropertyModel<Date>(this, "endDate")));

        IModel<List<Item>> itemsModel = new LoadableDetachableModel<List<Item>>(){
            @Override
            protected List<Item> load() {
                return logParseDao.findByDates(startDate, endDate);
            }
        };
        add(new ListView<Item>("items", itemsModel) { ... });
    }
}
1 голос
/ 03 апреля 2012

Используйте конечные переменные класса (атрибуты) или конечные переменные, где бы вы ни находились (например, в конструкторе):

class MyPage {
    final myClassVariable;

    MyPage() {
        final myMethodVariable;

        IModel myModel = new Model() {
            getObject() {
                // access on myClassVariable and myMethodVariable
            }
        }

    }

}
...