Uploaded image for project: 'Wicket'
  1. Wicket
  2. WICKET-3512

<wicket:enclosure> results in MarkupException when used with multiple <wicket:child>

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Resolved
    • Major
    • Resolution: Fixed
    • 1.5-RC2
    • 1.5-RC3
    • None
    • None

    Description

      Put below simple pages into a Wicket web application:

      TestPage1.html:

      <html>
      <head>
      <title>title</title>
      </head>
      <body>
      <div wicket:id="test1"></div>
      <wicket:child></wicket:child>
      </body>
      </html>

      TestPage1.java:

      package com.example.test;
      import org.apache.wicket.markup.html.WebPage;
      import org.apache.wicket.markup.html.basic.Label;

      public class TestPage1 extends WebPage {

      public TestPage1()

      { add(new Label("test1", "test1")); }

      }

      TestPage2.html:

      <wicket:extend>
      <wicket:enclosure child="test2">
      <div wicket:id="test2"></div>
      </wicket:enclosure>
      <wicket:child></wicket:child>
      </wicket:extend>

      TestPage2.java:

      package com.example.test;

      import org.apache.wicket.markup.html.basic.Label;

      public class TestPage2 extends TestPage1 {

      public TestPage2()

      { add(new Label("test2", "test2")); }

      }

      TestPage3.html:

      <wicket:extend>
      <wicket:enclosure child="test3">
      <div wicket:id="test3"></div>
      </wicket:enclosure>
      </wicket:extend>

      TestPage3.java:

      package com.example.test;

      import org.apache.wicket.markup.html.basic.Label;

      public class TestPage3 extends TestPage2 {

      public TestPage3()

      { add(new Label("test3", "test3")); }

      }

      Here TestPage3 extends TestPage2, and TestPage2 extends TestPage1. Both TestPage2.html and TestPage3.html contains a <wicket:enclosure> tag. Now mount TestPage3 and access it, below errors will be generated:

      Message: The component [Component id = test2] was rendered already. You can render it only once during a render phase. Class relative path: org.apache.wicket.markup.html.basic.Label:test2

      Root cause:

      org.apache.wicket.markup.MarkupException: The component [Component id = test2] was rendered already. You can render it only once during a render phase. Class relative path: org.apache.wicket.markup.html.basic.Label:test2
      at org.apache.wicket.Page.componentRendered(Page.java:299)
      at org.apache.wicket.Component.rendered(Component.java:2570)
      at org.apache.wicket.Component.internalRender(Component.java:2377)
      at org.apache.wicket.Component.render(Component.java:2301)
      at org.apache.wicket.MarkupContainer.renderNext(MarkupContainer.java:1415)
      ...

      This error won't occur if <wicket:enclosure> is removed from one of the page.

      Attachments

        1. WICKET-3512.patch
          12 kB
          Pedro Santos
        2. WICKET-3512-2.patch
          15 kB
          Pedro Santos

        Activity

          People

            pedrosans Pedro Santos
            robinshine Robin Shine
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: