2011-05-20 49 views
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()會引發該警告類型,那麼最佳做法是什麼?
- 我不能把這個邏輯放在構造函數中,因爲你不應該解析那裏的屬性,除了我提到的那個之外還有什麼選項?

+0

所以基本上你想用另一個替換一個面板? – biziclop 2011-05-20 21:44:32

回答

2

與面板中的大多數邏輯一樣,構造函數不是最好的地方。在施工期間,面板(或任何其他組件)尚未附加到頁面上。這使組件處於脆弱的狀態,其中一些組件甚至沒有任何標記。 更復雜的邏輯應該放在構造函數之外。 Wicket 1.5提供了一個onInitialRender方法,可以在任何可以安全放置任何邏輯的地方覆蓋。在檢票1.4.x的有通過實施onBeforeRender作爲

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

從而創造一個onInitialRender-掛鉤,只有執行一次和國際海事組織最好的地方,把那個不依賴於其他掛鉤的任何邏輯來模擬掛鉤的簡單方法。

編輯:在你的情況下,警告表示無法使用資源查找的預期鏈,因爲如果在當前組件中沒有找到資源,則可以使用組件的層級結構最終應用級別。

+0

@卡洛斯帕你能解釋一下,爲什麼兩年後你不接受答案? – Nicktar 2013-04-17 14:56:36

+0

當出現新答案時,通常會發生這種情況,OP認爲最好在該答案上勾選複選標記,意識到錯誤,剔除它並離開網頁,而不會在原始答案上覆選複選標記。 (感謝你的回答,雖然幫了我很多。) – aioobe 2017-01-07 00:55:36