Java 在wicket模型中将参数传递给DAO得到过滤结果

Java 在wicket模型中将参数传递给DAO得到过滤结果,java,wicket,dao,Java,Wicket,Dao,我正在接受wicket表单中的日期-现在我想用日期查询我的DAO对象,并获得筛选结果。所以问题是如何在模型中传递参数?或者我可以在模型中传递参数吗? 默认情况下,模型调用getObject()方法-该方法不能接受任何参数-- 如果我使用这个模型,我就不能调用我创建的另一个方法(getByDates(startDate,endDate)) 将参数传递给DAO并在前端显示结果的最佳方法是什么。。 例如,数据提供者/模型等 final AbstractReadOnlyModel<L

我正在接受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);
            }
        };
final AbstractReadOnlyModel listModel=new AbstractReadOnlyModel()
{
@凌驾
公共列表getObject(){
//TODO自动生成的方法存根
返回logParsedDao.findAll();
}
公共列表getObject(日期开始日期、日期结束日期){
//TODO自动生成的方法存根
返回logParsedDao.findByDates(startDate,endDate);
}
};
在您的范围内(例如,在构造函数中)的任何位置使用最终类变量(属性)或最终变量:

在您的范围内(例如,在构造函数中)的任何位置使用最终类变量(属性)或最终变量:


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

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) { ... });
    }
}
类MyPage扩展页面{
私人日期开始日期;
私人日期结束日期;
公共MyPage(){
表单=新表单(“表单”){…提交逻辑等…};
添加(表格);
添加(新日期字段(“startDate”,新属性模型(“startDate”));
添加(新的日期字段(“endDate”,新的PropertyModel(“endDate”));
IModel itemsModel=new-LoadableDetachableModel(){
@凌驾
受保护列表加载(){
返回logParseDao.findByDates(startDate,endDate);
}
};
添加(新列表视图(“项”,itemsModel){…});
}
}

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

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) { ... });
    }
}
类MyPage扩展页面{
私人日期开始日期;
私人日期结束日期;
公共MyPage(){
表单=新表单(“表单”){…提交逻辑等…};
添加(表格);
添加(新日期字段(“startDate”,新属性模型(“startDate”));
添加(新的日期字段(“endDate”,新的PropertyModel(“endDate”));
IModel itemsModel=new-LoadableDetachableModel(){
@凌驾
受保护列表加载(){
返回logParseDao.findByDates(startDate,endDate);
}
};
添加(新列表视图(“项”,itemsModel){…});
}
}

您的意思是:如何从wicket表单获取上述代码中的startDate、endDate?你能展示一下你的一些表单代码吗?你的意思是:如何从wicket表单中获取上面代码中的startDate和endDate?您可以显示一些表单代码吗?使用
final
是快速耗尽内存的好方法。虽然方便,但您确实需要确保使用
final
修饰符不会创建不需要的引用。在你的例子中,
myClassVariable
不需要是
final
才能在匿名内部类中引用。使用
final
变量和内存不足之间有什么关系?非常感谢-虽然我没有使用final-但我从您的回答中了解到了这一点-并解决了我的问题-:)不需要使用final:)并非所有的
final
用法都是不好的。也就是说,每当您对参数使用“final”并将其传递到匿名内部类(例如模型)时,您都会将该参数绑定到实例。如果这是一个Hibernate实体,您将保留对Hibernate会话的引用,该会话将保留与会话一起使用的所有实体的列表,这将增加页面的内存占用,从而很容易导致没有更多内存。在那里,做到了这一点,努力避免再次这样做。使用
final
是快速耗尽内存的好方法。虽然方便,但您确实需要确保使用
final
修饰符不会创建不需要的引用。在你的例子中,
myClassVariable
不需要是
final
才能在匿名内部类中引用。使用
final
变量和内存不足之间有什么关系?非常感谢-虽然我没有使用final-但我从您的回答中了解到了这一点-并解决了我的问题-:)不需要使用final:)并非所有的
final
用法都是不好的。也就是说,每当您对参数使用“final”并将其传递到匿名内部类(例如模型)时,您都会将该参数绑定到实例。如果这是一个Hibernate实体,您将保留对Hibernate会话的引用,该会话将保留与会话一起使用的所有实体的列表,这将增加页面的内存占用,从而很容易导致没有更多内存。谢谢你的回答——因为这更多的是有效的解决方案——我接受你的回答:)干杯谢谢你的回答——因为这更多的是有效的解决方案——我接受你的回答:)干杯