Warum bin ich immer "Die Komponente(N) unter Fehler beim Rendern"?
Wenn ich einen ChildPanel zu einer Seite, bekomme ich eine Fehlermeldung, die besagt:
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)
Ich kann deutlich sehen, die betreffenden Komponenten Hinzugefügt werden, die im markup in meinem AbstractParentPanel, die meine ChildPanel erstreckt. Das seltsame ist, wenn ich die AbstractParentPanel eine nicht-abstrakte Klasse, ich bin in der Lage, um hinzuzufügen, dass das panel ohne Probleme.
Warum bin ich immer diese Fehlermeldung?
HINWEIS: ich habe bereits die Antwort gefunden auf diese Frage. Ich bin hinzufügen, um SO anderen zu helfen, da ich verschwendet mehr Zeit, als ich haben sollte für solch eine einfache Prüfung. Wenn Sie in Brand geraten, die durch diese Botschaft und diese Antwort half Sie, berücksichtigen, die Abstimmung bis das JIRA-ticket
Du musst angemeldet sein, um einen Kommentar abzugeben.
Beginnen Sie immer mit dem offensichtlichen an, und stellen Sie sicher, dass die
wicket:id(s)
sind definiert in Ihrem markup. Wenn Sie sehen, dass die ID Hinzugefügt, die Sie im markup, dann sind die Chancen Sie haben das folgende Szenario:add(new ChildPanel("myChildPanel"));
AbstractParentPanel
rufen Sieadd(new Label("myCommonLabel"));
ChildPanel.html
vergessen Sie hinzufügen<wicket:extend>
- tags oder vielleicht sogar<wicket:panel>
tags, oder Sie haben Sie nicht mit den Komponenten in Frage.wicket:id
ist nicht falsch geschrieben, entweder. Ich verbrachte eine halbe Stunde nachdem das aufspüren von jeder anderen Möglichkeit, dann bemerkt hatte, dass ichwicker:id
im markup. 🙂AbstractTab.getPanel(String panelId)
aber nicht (oder nicht korrekt) verwenden Sie die panelId argument für den Bau meiner Komponente, z.B.return MyPanel("panelId");
stattreturn MyPanel(panelId);
(Beachten Sie die Anführungszeichen um panelId.)<div class="myComponentId"></div>
statt<div wicket:id="myComponentId"></div>
. Diese einem am meisten wehtut! 😉Andere Möglichkeit ist, dass Ihre Seite nicht in jeder markup. Dies kann versehentlich geschehen, wenn der name der java-Klasse nicht mit dem Namen Ihres html-Codes. Ich kämpfte vor kurzem mit einer groß-und Kleinschreibung situation hier.
Stellen Sie sicher, dass Sie eine Wicket-Komponente
wicket:id
statt derid
! Diese bekommt man mich die ganze Zeit.