2013-02-15 94 views
2

在我的wicket应用程序中,Page navigation是通过调用onClick()方法上新页面的构造函数来创建新的Page对象。如下。Wicket - 在异常处理后正确清理页面组件

DisplayItem.add(new Link("edit") { 
@Override 
    public void onClick() { 
    try{ 
    setResponsePage(new ReportPage(object, getPageReference())); 
     } catch (CustomException e){ 
      /// set some feedback message 
     } 
    } 
}); 

ReportPage有几个LoadableDetachableModels,PageableListViews,面板,片段等我做的ReportPage的构造异常处理,如果发生异常抛出回来。 Ses在下面。 (部分代码)

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 

} 

因此,如果构建页面时发生异常。我应该怎么做清理(在终于块)? 。我应该将所有单个对象设置为null吗? 是否有任何Wicket方法垃圾收集(或发送信号给GC)?

谢谢

+0

除了您的问题的优点之外,为什么不处理ReportPage中的异常登录,因为此页知道出了什么问题以及如何处理它?这样你就可以在两个或两个以上的地方对页面进行逻辑... – 2013-02-15 13:38:58

+2

我是否错过了某些东西,或者不应该让垃圾收集器处理这种情况? – Nicktar 2013-02-15 13:40:34

+1

@RobertNiestroj我在报告页面中有一个单独的try..catch块,并且记录了错误,但是如果我不抛出Exception,那么wicket会生成运行时页面异常,因为html页面中标记的组件不会呈现。我想,我会修改我的帖子以增加更多的清晰度。 – Jay 2013-02-15 13:46:19

回答

1

一个构造函数中抛出异常的形式立即使一半初始化的对象进行垃圾回收。除非你在某种程度上通过在引发异常之前将对象添加到另一个对象所拥有的集合中来阻止它,否则不需要担心该对象及其字段的释放。您仍然需要释放可能已经分配的任何非托管资源(例如文件句柄),正如您在finally块中通常所做的那样。

+0

我想我现在明白了。无论如何,我的应用程序没有文件句柄,我的数据库连接在服务器级由连接池管理,数据库操作由实体bean管理。 – Jay 2013-02-18 09:16:22