【问题标题】:exception handling for wicket panels?检票口面板的异常处理?
【发布时间】:2011-05-20 20:06:41
【问题描述】:

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

我找到了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() 会引发这种类型的警告,那么最佳做法是什么?
- 我不能把这个逻辑放在构造函数中,因为你不应该在那里解析属性,除了我提到的那个还有什么选项?

【问题讨论】:

  • 所以基本上你想用另一个面板替换一个面板?

标签: exception exception-handling wicket panels


【解决方案1】:

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

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

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

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

【讨论】:

  • @CarlosP 你能解释一下,为什么两年后你不接受答案吗?
  • 这通常发生在出现新答案时,OP认为最好也勾选该答案上的复选标记,意识到错误,取消勾选并离开页面而不重新勾选原始答案上的复选标记. (感谢您的回答,对我帮助很大。)
【解决方案2】:

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

详情请参阅https://cwiki.apache.org/WICKET/migration-to-wicket-15.html#MigrationtoWicket1.5-ComponentInitializationComponent%2523onInitialize

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-10
    • 1970-01-01
    • 1970-01-01
    • 2019-04-04
    • 2019-10-11
    相关资源
    最近更新 更多