2012-06-19 44 views
4

當我添加一個ChildPanel到一個頁面,我得到一條錯誤:爲什麼我得到「下面的組件無法呈現」?

org.apache.wicket.WicketRuntimeException: 
The component(s) below failed to render. 
A common problem is that you have added a component in code 
but forgot to reference it in the markup 
(thus the component will never be rendered). 

1. [Form [Component id = myForm]] 
2. [DropDownChoice [Component id = referenceType]] 
3. [TextField [Component id = referenceNumber]] 
4. [CheckBox [Component id = referenceReqChk]] 
5. [ [Component id = saveRefNumButton]] 
6. [ [Component id = cancelRefNumButton]] 

    at org.apache.wicket.Page.checkRendering(Page.java:693) 
    at org.apache.wicket.Page.onAfterRender(Page.java:849) 
    at org.apache.wicket.markup.html.WebPage.onAfterRender(WebPage.java:213) 
    at org.apache.wicket.Component.afterRender(Component.java:950) 
    at org.apache.wicket.Component.render(Component.java:2298) 
    at org.apache.wicket.Page.renderPage(Page.java:1041) 
    at org.apache.wicket.request.handler.render. 
      WebPageRenderer.renderPage(WebPageRenderer.java:105) 

我可以清楚地看到問題的組件在標記添加在我AbstractParentPanel,這我ChildPanel延伸。奇怪的是,如果我使AbstractParentPanel成爲非抽象類,那麼我可以添加該面板而不會出現問題。

爲什麼我會收到此錯誤?

注:我已經找到了這個問題的答案。我把它加入到SO來幫助別人,因爲我浪費了更多的時間,而不是我應該做這樣一個簡單的檢查。如果你被這個消息燒燬,這個答案幫助了你,認爲投票了this JIRA ticket

回答

6

始終具有明顯的啓動,並確保wicket:id(s)在您的標記定義。如果您看到在您的標記中添加了ID,那麼您很有可能出現以下情況:

  • 您正在嘗試呈現另一個組件的子組件。這意味着您試圖呈現作爲另一個頁面或面板的子類的頁面或面板。
    • 例如在一個頁面上,你嘗試調用add(new ChildPanel("myChildPanel"));
  • 組件要擴展定義,並用它自己的標記
    • 例如添加組件在AbstractParentPanel你叫add(new Label("myCommonLabel"));
  • 在孩子的標記部件未能包括一些需要檢票XHTML
    • 例如在ChildPanel.html之內,您忘記了添加<wicket:extend>標籤或者甚至<wicket:panel>標籤,或者您沒有添加標籤。
+2

確保字符串'wicket:id'不是拼寫錯誤。一旦追蹤其他可能性,我花了半個小時,然後注意到在標記中有'wicker:id'。 :) – biziclop

+0

@biziclop :-) QWickie插件可以幫助我避免這種情況,但我感到你的痛苦。 – Snekse

+0

重寫創建組件的方法時,我經常遇到這種情況,例如'AbstractTab.getPanel(String panelId)'但不要(或不正確)使用panelId參數來構造我的組件,例如'return MyPanel(「panelId」);''而不是'return MyPanel(panelId);'(注意panelId周圍的引號) – peterp

2

確保您設置的檢票組件wicket:id代替id!這一個讓我一直都在。

2

另一種可能性是您的頁面沒有任何標記。如果您的java類的名稱與您的html的名稱不匹配,這可能會意外發生。我最近在這裏遇到了一個病例敏感的情況。

+0

馬丁不問一個問題。他只是表示「下面的組件無法呈現」的另一個原因。「錯誤是如果你的文件有不匹配的情況。這是一個有效的觀點。它沒有解決我遇到的問題,但它可能有助於其他人。 – Snekse

+0

它幫助!謝謝 :) –

相關問題