Wicket LoadableDetachableModel异常处理问题

时间:2013-02-18 15:53:28

标签: java wicket wicket-1.5

在我的项目中,我使用的是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() 方法之外移动数据库操作。但有没有办法这样做?

如果有人经历过这个,那么如果你能分享这些信息会很棒。

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:3)

此代码仅定义load()方法并且不调用它,因此它抛出的任何异常都不会在此try-catch中捕获。

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

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

处理该方法之外的数据库错误会很痛苦。对其他答案的评论提供了关于如何继续进行的提示。