[ 
https://issues.apache.org/jira/browse/WICKET-3512?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13009699#comment-13009699
 ] 

Pedro Santos commented on WICKET-3512:
--------------------------------------

Rendering the TransparentWebMarkupContainer for the wicket:extend tag in 
TestPage3.html, ComponentResolvers return the parent Enclosure component, since 
in the hierarchy we have now an instance of IComponentResolver ( the 
TransparentWebMarkupContainer created to the wicket:extend tag in 
TestPage2.html ). So the same enclosure get rendered twice, generating this bug.

Relevant stack trace:

TransparentWebMarkupContainer.resolve(MarkupContainer, MarkupStream, 
ComponentTag) line: 50
          --> TransparentWebMarkupContainer created to the wicket:extend tag in 
TestPage2.html is a resolver, he know who is the "_enclosure1", and return it 
to be rendered twice
ComponentResolvers.resolveByComponentHierarchy(MarkupContainer, MarkupStream, 
ComponentTag) line: 111   
ComponentResolvers.resolve(MarkupContainer, MarkupStream, ComponentTag, 
ComponentResolvers$ResolverFilter) line: 54     
TransparentWebMarkupContainer(MarkupContainer).renderNext(MarkupStream) line: 
1407      
           --> TransparentWebMarkupContainer for the wicket:extend tag in 
TestPage3.html trying to render "_enclosure1". As there are no such child, the 
resolvers are called.

> <wicket:enclosure> results in MarkupException when used with multiple 
> <wicket:child>
> ------------------------------------------------------------------------------------
>
>                 Key: WICKET-3512
>                 URL: https://issues.apache.org/jira/browse/WICKET-3512
>             Project: Wicket
>          Issue Type: Bug
>    Affects Versions: 1.5-RC2
>            Reporter: Robin Shine
>            Assignee: Pedro Santos
>
> 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. 

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to