我为页面添加了异常处理,现在我想为面板执行此操作。
我找到了http://apache-wicket.1842946.n4.nabble.com/ExceptionHandling-in-Panels-td3311271.html和http://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()会抛出那种类型的警告,那么最佳实践是什么呢?
- 我不能在构造函数中放置那个逻辑,因为你不应该在那里解析属性,除了我提到的那个之外还有哪些选项?
答案 0 :(得分:2)
与面板中的大多数逻辑一样,构造函数不是最佳位置。在施工期间,面板(或任何其他组件)尚未到达页面。这使组件处于易碎状态,其中某些组件甚至没有任何标记。 更复杂的逻辑应该放在构造函数之外。 Wicket 1.5提供了一个onInitialRender方法,可以在可以安全地放置任何逻辑的地方覆盖它。在Wicket 1.4.x中,通过将onBeforeRender实现为
,可以轻松地模拟该钩子@Override
protected void onBeforeRender() {
if (!hasBeenRendered()) {
onInitialRender();
}
super.onBeforeRender();
}
因此创建一个只执行一次的onInitialRender挂钩,并且IMO是放置任何不依赖于其他挂钩的逻辑的最佳位置。
编辑:在您的情况下,警告表明无法使用预期的资源查找链,因为如果在当前组件或最终组件中找不到资源,则没有可用作回退的组件层次结构应用水平。
答案 1 :(得分:1)
注意:Wicket 1.5不提供onInitialRender方法(可能在某些预发布期间添加和删除)。相反,应该使用onInitialize方法将子组件添加到面板(或任何其他组件)。