1

我为页面添加了异常处理,现在我想为面板执行此操作。

我发现http://apache-wicket.1842946.n4.nabble.com/ExceptionHandling-in-Panels-td3311271.htmlhttp://apache-wicket.1842946.n4.nabble.com/newbie-best-practice- for-not-rendering-component-td1871632.html,但答案并不令人满意,因为我意识到 Wicket 中没有内置支持面板的异常处理,就像页面一样。在带有面板标记的片段和错误片段之间进行选择并不是我正在寻找的强大支持。由于我的 web 应用程序中的大多数异常都可能出现在添加组件和使用模型的逻辑部分,所以我想将这部分逻辑放在构造函数中,这样当发生错误时,我可以捕获它然后显示我想要的错误面板。就像是:

try{
  add(new MyPanel(panelId, model));
}catch (Exception e){
  add(new ErrorPanel(panelId, e));
  ... 
}

但是在使用 getString() 方法解析构造函数中的属性时,我会收到警告。

所以,我的问题是:
- 有没有解决这个问题的在线示例?或者对此有什么想法?
- 如果在构造函数中使用 getString() 会引发这种类型的警告,那么最佳实践是什么?
- II 不能将该逻辑放在构造函数中,因为您不应该在那里解析属性,除了我提到的选项之外还有哪些选项?

4

2 回答 2

2

与面板中的大多数逻辑一样,构造函数并不是最好的地方。在构建期间,面板(或任何其他组件)尚未附加到页面。这使组件处于脆弱状态,其中一些组件甚至没有任何标记。更复杂的逻辑应该放在构造函数之外。Wicket 1.5 提供了一种 onInitialRender 方法,可以在其中安全地放置任何逻辑的地方覆盖该方法。在 Wicket 1.4.x 中,有一种简单的方法可以通过将 onBeforeRender 实现为来模拟该钩子

@Override
protected void onBeforeRender() {
    if (!hasBeenRendered()) {
        onInitialRender();
    }
    super.onBeforeRender();
}

因此创建了一个只执行一次的 onInitialRender-hook,而 IMO 是放置任何不依赖于其他钩子的逻辑的最佳位置。

编辑:在您的情况下,警告表明无法使用预期的资源查找链,因为如果在当前组件或最终应用程序级别找不到资源,则没有可以用作后备的组件层次结构。

于 2011-05-21T11:01:45.710 回答
1

注意:Wicket 1.5 不提供 onInitialRender 方法(它可能在某些预发布版本中被添加和删除)。相反,应该使用 onInitialize 方法将子组件添加到面板(或任何其他组件)。

有关详细信息,请参阅https://cwiki.apache.org/WICKET/migration-to-wicket-15.html#MigrationtoWicket1.5-ComponentInitializationComponent%2523onInitialize

于 2012-03-29T06:49:33.070 回答