[
https://issues.apache.org/jira/browse/WICKET-3512?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13010660#comment-13010660
]
Pedro Santos edited comment on WICKET-3512 at 3/24/11 8:30 PM:
---------------------------------------------------------------
In a very unlikely scenario involving user declaring the same wicket id
generated by WicketTagIdentifier to its own components just above a TWMC
enclosing wicket tags to be resolved, user will be able to break our renderer
because the page auto index improvement is not enough.
I'm sending the patch again with the API improvement, thanks Juergen, plus more
test cases exposing this problem fixed in TWMC.
was (Author: pedrosans):
In a very unlikely scenario involving user declaring the same wicket id
generated by WicketTagIdentifier to it's own components just above a TWMC
enclosing wicket tags to be resolved, user will be able to break our renderer
because the page auto index improvement is not enough.
I'm sending the patch again with the API improvement, thanks Juergen, plus more
test cases exposing this problem fixed in TWMC.
> <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
> Fix For: 1.5-RC3
>
> Attachments: WICKET-3512-2.patch, WICKET-3512.patch
>
>
> 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