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 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)

問題のコンポーネントが、ChildPanel が拡張する AbstractParentPanel のマークアップに追加されていることがはっきりとわかります。奇妙なことに、AbstractParentPanel を非抽象クラスにすると、そのパネルを問題なく追加できます。

このエラーが発生するのはなぜですか?

注: この質問に対する答えは既に見つかりました。このような単純なチェックに必要以上の時間を無駄にしたので、他の人を助けるためにSOに追加しています。このメッセージに心を痛め、この回答が役に立った場合は、この JIRA チケットに投票することを検討してください

4

3 に答える 3

6

常に明白なことから始めて、wicket:id(s)マークアップで定義されていることを確認してください。マークアップに ID が追加されている場合は、次のシナリオが考えられます。

  • 別のコンポーネントの子であるコンポーネントをレンダリングしようとしています。これは、別のページまたはパネルのサブクラスであるページまたはパネルをレンダリングしようとしていることを意味します。
    • たとえば、ページ内で呼び出しを試みますadd(new ChildPanel("myChildPanel"));
  • 拡張しているコンポーネントは、独自のマークアップを使用してコンポーネントを定義および追加しています
    • 例:AbstractParentPanelあなたの電話の中でadd(new Label("myCommonLabel"));
  • 子コンポーネントのマークアップに、必要な Wicket XHTML を含めることができませんでした
    • たとえば、 内で、タグまたはタグChildPanel.htmlを追加するのを忘れたか、問題のコンポーネントが含まれていません。<wicket:extend><wicket:panel>
于 2012-06-19T21:30:39.277 に答える
4

もう 1 つの可能性は、ページにマークアップがないことです。これは、Java クラスの名前が HTML の名前と一致しない場合に発生する可能性があります。私は最近、ここで大文字と小文字を区別する状況に苦労しました。

于 2015-01-29T08:49:12.873 に答える
4

!のwicket:id代わりにWicket コンポーネントを設定していることを確認してください。idこれはいつも私を取得します。

于 2013-03-13T14:41:00.760 に答える