2

在我的项目中,我使用如下所示的 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()方法之外。但是有什么办法吗?

如果有人遇到过这种情况,如果您能分享这些信息,那就太好了。

4

2 回答 2

3

这段代码只定义了load()方法,并没有调用它,所以它抛出的任何异常都不会被这个try-catch捕获。

中的load()方法LoadableDetachableModel通常只调用getObject()也定义在中的方法LoadableDetachableModel,该方法是从应用程序中的其他位置和 Wicket 框架本身调用的。

您可能应该在load()方法本身内部有一个 try-catch 来处理数据库访问可能发生的任何异常。如果在该方法中存在您无法处理的异常,您可以抛出一个WicketRuntimeException包装异常,这通常会导致错误页面。

在该方法之外处理数据库错误将是痛苦的。对另一个答案的评论暗示了您如何继续进行。

于 2013-02-18T16:30:28.493 回答
3

这不是异常处理的工作方式。您需要在 LDM 内部进行异常处理。将您的一些数据库操作包装在 try-catch 语句中。

于 2013-02-18T16:05:34.313 回答