Java Wicket-异常处理后正确清理页面组件

Java Wicket-异常处理后正确清理页面组件,java,wicket,wicket-1.5,Java,Wicket,Wicket 1.5,在我的wicket应用程序中,页面导航是通过在onClick()方法上调用新页面的构造函数来创建新页面对象。如下 DisplayItem.add(new Link("edit") { @Override public void onClick() { try{ setResponsePage(new ReportPage(object, getPageReference())); } catch ( CustomException e){

在我的wicket应用程序中,页面导航是通过在onClick()方法上调用新页面的构造函数来创建新页面对象。如下

DisplayItem.add(new Link("edit") { 
@Override
   public void onClick() {
    try{
    setResponsePage(new ReportPage(object, getPageReference()));
       } catch ( CustomException e){
          /// set some feedback message
        }
   }
});
ReportPage有几个可加载的可分离模型、PageableListView、面板、片段等。我正在ReportPage的构造函数中进行异常处理,如果发生异常,会将其抛出。下面是Ses。(部分代码)

public ReportPage(final Objectm,final PageReference pr)抛出自定义异常{
试一试{
最终可装载可拆卸模型ldm=
新的LoadableDetachableModel(){
@凌驾
受保护的MaintReport负载(){
返回新的MaintReport();
}
};
/*
几个可加载的可拆卸模型、页面列表视图、面板、片段等。
*/ 
}捕获(例外情况除外){
//创建自定义异常
}最后{
//清理东西
}
因此,如果在构建页面时发生异常,我应该如何清理(在finally块中)?我应该将所有单个对象设置为null吗? 是否有任何Wicket方法进行垃圾收集(或向GC发送信号)


感谢您

在构造函数中抛出异常表单会立即使半初始化的对象符合垃圾收集的条件。除非您在抛出异常之前通过将该对象添加到另一个对象拥有的集合中来阻止它,否则无需担心该对象的释放您仍然需要释放可能已分配的任何非托管资源(例如文件句柄)正如您通常在finally block中所做的那样。

除了您的问题的优点之外,为什么不处理ReportPage中的异常登录,因为该页面知道发生了什么错误以及如何处理它?这样,您就可以在页面上的两个或多个位置进行逻辑处理……我是否遗漏了什么,或者垃圾收集器不应该处理这种情况像这样的问题?@RobertNiestroj我正在进行一次单独的尝试。在报告页面中捕获块并记录错误,但是如果我不抛出异常,wicket将生成一个运行时页面异常,因为html页面中标记的组件没有呈现。我想,我将修改我的帖子以增加清晰度。@Nicktar By defaut确实如此,但这不是一个g吗将新分配的对象设置为null以便垃圾回收器执行释放的ood实践?@jkcool不再。在java的早期版本中,建议这样做。我不知道这是什么时候改变的,但这十年中发布的任何版本都不再需要这样做。gc可以在没有require的情况下找到未引用的对象我想,我现在明白了。无论如何,我的应用程序没有文件句柄,我的数据库连接由连接池在服务器级别管理,数据库操作由实体bean管理。
 public ReportPage(final Objectm, final PageReference pr) throws CustomException{

try{
final LoadableDetachableModel<MaintReport> ldm = 
         new LoadableDetachableModel<MaintReport>() {

            @Override
            protected MaintReport load() {
                return new MaintReport();
            }
        };

/*

Several LoadableDetachableModels, PageableListViews, Panels, Fragments  etc.

*/ 


} catch ( Exception ex){
// create Custom Exception 

} finally {

 // Clean up of stuff 

}