将参数传递给DAO以获得过滤结果导致wicket模型

时间:2012-04-03 14:23:41

标签: java wicket dao

我正在接受wicket表单中的日期 - 现在我想查询带有日期的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 个答案:

答案 0 :(得分:4)

通常,如果日期不是您的域模型的一部分,而是您在用户界面中需要的项目,那么您可以将它们作为页面,面板或表单的一部分,然后在您的匿名内部类中引用它们: / p>

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 :(得分:1)

使用最终类变量(属性)或最终变量,无论您在范围内(例如在构造函数中):

class MyPage {
    final myClassVariable;

    MyPage() {
        final myMethodVariable;

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

    }

}