Java Wicket LoadableDetachableModel异常处理问题
在我的项目中,我使用LoadableDetachableModel,如下所示Java Wicket LoadableDetachableModel异常处理问题,java,wicket,wicket-1.5,Java,Wicket,Wicket 1.5,在我的项目中,我使用LoadableDetachableModel,如下所示 public ReportPage(final Objectm, final PageReference pr) throws CustomException{ try{ final LoadableDetachableModel<List<MaintReport>> ldm = new LoadableDetachableModel<List<MaintRepo
public ReportPage(final Objectm, final PageReference pr) throws CustomException{
try{
final LoadableDetachableModel<List<MaintReport>> ldm =
new LoadableDetachableModel<List<MaintReport>>() {
@Override
protected List<MaintReport>load() {
**// Some Database operations //**
return x;
}
};
/*
Several LoadableDetachableModels, PageableListViews, Panels, Fragments etc.
*/
} catch ( Exception ex){
// create Custom Exception
} finally {
// Clean up of stuff
}
public ReportPage(final Objectm,final PageReference pr)抛出自定义异常{
试一试{
最终可装载可拆卸模型ldm=
新的LoadableDetachableModel(){
@凌驾
受保护的Listload(){
**//一些数据库操作//**
返回x;
}
};
/*
几个可加载的可拆卸模型、页面列表视图、面板、片段等。
*/
}捕获(例外情况除外){
//创建自定义异常
}最后{
//清理东西
}
问题是重写函数load()
涉及一些数据库操作。如果从该方法引发异常或从该方法引发异常,我在哪里可以捕获?。似乎我无法捕获。当我写入一些日志消息时,我看到load()
方法在整个构造函数执行后被调用。我完全可以将数据库操作移到
load()
方法之外。但是有什么方法可以这样做吗
如果有人经历过这种情况,如果您可以共享信息,那就太好了。这不是异常处理的工作方式。您需要在LDM内部执行异常处理。将一些数据库操作包装在try-catch语句中。此代码仅定义
加载()
方法,并且不调用它,因此它抛出的任何异常都不会在这个try-catch中被捕获
LoadableDetachableModel
中的load()
方法通常仅被调用为getObject()
方法,该方法也在LoadableDetachableModel
中定义,从应用程序中的其他位置和Wicket框架本身调用
您可能应该在load()
方法本身中有一个try-catch来处理数据库访问可能发生的任何异常。如果在该方法中存在无法处理的异常,您可以抛出一个WicketRuntimeException
包装异常,这通常会导致错误页面
在该方法之外处理数据库错误将是一件痛苦的事情。另一个答案上的注释给出了如何继续的提示。是的,我尝试过,但加载()方法无法抛出异常。抽象类定义不允许它抛出异常。但是,如果加载方法失败,我希望整个构造函数抛出异常。您可以抛出任何RuntimeException并注册一个RequestCycleListener对您的异常作出反应。因此,这意味着不可能从该方法抛出已检查的异常方法。是的,RuntimeException和使用RequestCycleListener是我最糟糕的计划。无论如何,谢谢。通过调用“new ReportPage()”创建新的ReportPage时,会调用“load()”方法。但是,当我查看日志文件时,似乎是“load()'方法在构造函数中的最后一行代码之后执行。这正是我遇到的问题。我试图阻止加载页面。了解'load()'方法是如何触发的将有助于更好地理解如何有效地处理错误。