Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Wicket LoadableDetachableModel异常处理问题_Java_Wicket_Wicket 1.5 - Fatal编程技术网

Java Wicket 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

在我的项目中,我使用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 
}
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()'方法是如何触发的将有助于更好地理解如何有效地处理错误。