Wicket 为什么我会得到;下面的组件未能呈现“?”;?

Wicket 为什么我会得到;下面的组件未能呈现“?”;?,wicket,wicket-1.5,Wicket,Wicket 1.5,将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

将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中是为了帮助其他人,因为我浪费了这么多时间来做这么简单的检查。如果你被这条消息烧掉了,这个答案帮助了你,考虑投票

总是从显而易见的地方开始,确保<>代码> WIKET:ID(s)< /Cord>在你的标记中被定义。如果在标记中看到添加的ID,则可能出现以下情况:

  • 您正在尝试渲染另一个组件的子组件。这意味着您试图呈现的页面或面板是另一页面或面板的子类。
    • e、 g.在一个页面中,您尝试调用
      add(newchildpanel(“myChildPanel”)
  • 您正在扩展的组件已使用自己的标记定义和添加组件
    • e、 g.在
      AbstractParentPanel
      中,您调用
      add(新标签(“myCommonLabel”)
  • 子组件中的标记未能包含某些必需的Wicket XHTML
    • e、 g.在
      ChildPanel.html
      中,您忘记添加
      标记,甚至可能是
      标记,或者您的标记中不包含有问题的组件

确保设置的是Wicket组件的
Wicket:id
,而不是
id
!这个问题一直困扰着我。

另一种可能是您的页面没有任何标记。如果java类的名称与html的名称不匹配,则可能会意外发生这种情况。我最近遇到了一个区分大小写的问题。

确保字符串
wicket:id
也没有拼写错误。我花了半个小时追踪其他可能性,然后注意到标记中有
wicker:id
。)@biziclop:-)QWickie插件帮助我避免了这一点,但我感觉到了你的痛苦。我在重写创建组件的方法时经常遇到这种情况,例如
AbstractTab.getPanel(String panelId)
,但不要(或不正确地)使用panelId参数来构造我的组件,例如
return MyPanel(“panelId”)而不是
返回MyPanel(panelId)
(注意panelId周围的引号。)我的另一个常见个人问题是写
,而不是
。这个最疼!;-)为什么我的手指总是打字不好?马丁不是在问问题。他只是说“下面的组件无法呈现”的另一个原因。错误是如果您的文件中存在大小写不匹配。这是一个正确的观点。它没有解决我遇到的问题,但它可能会帮助其他人。是的,我十几年前发明了Wicket,这个问题昨天就出现了。我有点希望我们把它叫做别的东西,尽管它也有道理。事后诸葛亮。