在我的项目中,我使用的是LoadableDetachableModel,如下所示。
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
}
问题是重写函数 load()
会使某些数据库操作失败。如果从此方法抛出异常或从此方法引发异常,我可以在哪里捕获? 。看来我抓不住了。当我写一些日志消息时,我发现在执行完整个构造函数后会调用 load()
方法。
我绝对可以在 load()
方法之外移动数据库操作。但有没有办法这样做?
如果有人经历过这个,那么如果你能分享这些信息会很棒。
答案 0 :(得分:3)
这不是异常处理的工作原理。您需要在LDM中进行异常处理。在try-catch语句中包装一些数据库操作。
答案 1 :(得分:3)
此代码仅定义load()
方法并且不调用它,因此它抛出的任何异常都不会在此try-catch中捕获。
load()
中的LoadableDetachableModel
方法通常仅称为getObject()
中定义的LoadableDetachableModel
方法,该方法是从应用程序中的其他位置和Wicket框架调用的本身。
您应该在load()
方法本身内部使用try-catch来处理数据库访问可能执行的任何异常。如果在该方法中无法处理异常,则可以抛出WicketRuntimeException
包装异常,这通常会导致错误页面。
处理该方法之外的数据库错误会很痛苦。对其他答案的评论提供了关于如何继续进行的提示。