Author: jdonnerstag Date: Sun Jul 3 10:42:04 2011 New Revision: 1142411 URL: http://svn.apache.org/viewvc?rev=1142411&view=rev Log: fixed: Components inside an invisible <wicket:enclosure> are still rendered Issue: WICKET-3833
Added: wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePageExpectedResult_12.html wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePageExpectedResult_13.html wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePage_12.html wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePage_12.java wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePage_13.html wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePage_13.java wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/SecuredContainer_13.java Modified: wicket/trunk/wicket-core/src/main/java/org/apache/wicket/MarkupContainer.java wicket/trunk/wicket-core/src/main/java/org/apache/wicket/Page.java wicket/trunk/wicket-core/src/main/java/org/apache/wicket/markup/html/internal/Enclosure.java wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePageExpectedResult_1.html wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePageExpectedResult_2.html wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePageExpectedResult_4.html wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePageExpectedResult_5.html wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePageExpectedResult_9-1.html wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePageExpectedResult_9-2-1.html wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePageExpectedResult_9-2.html wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/EnclosureTest.java wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/InlineEnclosurePageExpectedResult_1.html Modified: wicket/trunk/wicket-core/src/main/java/org/apache/wicket/MarkupContainer.java URL: http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/main/java/org/apache/wicket/MarkupContainer.java?rev=1142411&r1=1142410&r2=1142411&view=diff ============================================================================== --- wicket/trunk/wicket-core/src/main/java/org/apache/wicket/MarkupContainer.java (original) +++ wicket/trunk/wicket-core/src/main/java/org/apache/wicket/MarkupContainer.java Sun Jul 3 10:42:04 2011 @@ -40,6 +40,7 @@ import org.apache.wicket.model.IComponen import org.apache.wicket.model.IModel; import org.apache.wicket.model.IWrapModel; import org.apache.wicket.settings.IDebugSettings; +import org.apache.wicket.util.iterator.ComponentHierarchyIterator; import org.apache.wicket.util.lang.Args; import org.apache.wicket.util.lang.Generics; import org.apache.wicket.util.string.ComponentStrings; @@ -904,6 +905,25 @@ public abstract class MarkupContainer ex } /** + * @return A iterator which iterators over all children and grand-children the Component + */ + public final ComponentHierarchyIterator visitChildren() + { + return new ComponentHierarchyIterator(this); + } + + /** + * @param clazz + * Filter condition + * @return A iterator which iterators over all children and grand-children the Component, + * returning only components which implement (instanceof) the provided clazz. + */ + public final ComponentHierarchyIterator visitChildren(final Class<?> clazz) + { + return new ComponentHierarchyIterator(this).filterByClass(clazz); + } + + /** * @param child * Component being added */ Modified: wicket/trunk/wicket-core/src/main/java/org/apache/wicket/Page.java URL: http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/main/java/org/apache/wicket/Page.java?rev=1142411&r1=1142410&r2=1142411&view=diff ============================================================================== --- wicket/trunk/wicket-core/src/main/java/org/apache/wicket/Page.java (original) +++ wicket/trunk/wicket-core/src/main/java/org/apache/wicket/Page.java Sun Jul 3 10:42:04 2011 @@ -40,6 +40,7 @@ import org.apache.wicket.session.ISessio import org.apache.wicket.settings.IDebugSettings; import org.apache.wicket.settings.IRequestCycleSettings.RenderStrategy; import org.apache.wicket.util.lang.Classes; +import org.apache.wicket.util.lang.Generics; import org.apache.wicket.util.lang.WicketObjects; import org.apache.wicket.util.string.StringValue; import org.apache.wicket.util.visit.IVisit; @@ -687,10 +688,9 @@ public abstract class Page extends Marku // Throw exception if any errors were found if (unrenderedComponents.size() > 0) { - // Get rid of set renderedComponents = null; - List<Component> transparentContainerChildren = new ArrayList<Component>(); + List<Component> transparentContainerChildren = Generics.newArrayList(); Iterator<Component> iterator = unrenderedComponents.iterator(); outerWhile : while (iterator.hasNext()) @@ -713,29 +713,23 @@ public abstract class Page extends Marku } } - // Now first test if the component has a sibling that is a transparent resolver. - for (Object o : component.getParent()) + if (hasInvisibleTransparentChild(component.getParent(), component)) { - Component sibling = (Component)o; - if (!sibling.isVisible()) + // If we found a transparent container that isn't visible then ignore this + // component and only do a debug statement here. + if (log.isDebugEnabled()) { - if (sibling instanceof IComponentResolver) - { - // we found a transparent container that isn't visible - // then ignore this component and only do a debug statement here. - if (log.isDebugEnabled()) - { - log.debug( - "Component {} wasn't rendered but most likely it has a transparent parent: {}", - component, sibling); - } - transparentContainerChildren.add(component); - iterator.remove(); - continue outerWhile; - } + log.debug( + "Component {} wasn't rendered but might have a transparent parent.", + component); } + + transparentContainerChildren.add(component); + iterator.remove(); + continue outerWhile; } } + // if still > 0 if (unrenderedComponents.size() > 0) { @@ -751,6 +745,31 @@ public abstract class Page extends Marku renderedComponents = null; } + private boolean hasInvisibleTransparentChild(final MarkupContainer root, final Component self) + { + for (Component sibling : root) + { + if ((sibling != self) && (sibling instanceof IComponentResolver) && + (sibling instanceof MarkupContainer)) + { + if (!sibling.isVisible()) + { + return true; + } + else + { + boolean rtn = hasInvisibleTransparentChild((MarkupContainer)sibling, self); + if (rtn == true) + { + return true; + } + } + } + } + + return false; + } + /** * Initializes Page by adding it to the Session and initializing it. */ Modified: wicket/trunk/wicket-core/src/main/java/org/apache/wicket/markup/html/internal/Enclosure.java URL: http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/main/java/org/apache/wicket/markup/html/internal/Enclosure.java?rev=1142411&r1=1142410&r2=1142411&view=diff ============================================================================== --- wicket/trunk/wicket-core/src/main/java/org/apache/wicket/markup/html/internal/Enclosure.java (original) +++ wicket/trunk/wicket-core/src/main/java/org/apache/wicket/markup/html/internal/Enclosure.java Sun Jul 3 10:42:04 2011 @@ -19,22 +19,15 @@ package org.apache.wicket.markup.html.in import org.apache.wicket.Component; import org.apache.wicket.MarkupContainer; import org.apache.wicket.WicketRuntimeException; -import org.apache.wicket.application.IComponentOnAfterRenderListener; import org.apache.wicket.markup.ComponentTag; import org.apache.wicket.markup.MarkupException; import org.apache.wicket.markup.MarkupStream; import org.apache.wicket.markup.html.WebMarkupContainer; import org.apache.wicket.markup.html.basic.EnclosureContainer; -import org.apache.wicket.markup.html.form.Form; -import org.apache.wicket.markup.html.form.FormComponent; -import org.apache.wicket.markup.html.form.IFormSubmittingComponent; import org.apache.wicket.markup.parser.filter.EnclosureHandler; import org.apache.wicket.markup.resolver.ComponentResolvers; import org.apache.wicket.markup.resolver.ComponentResolvers.ResolverFilter; import org.apache.wicket.markup.resolver.IComponentResolver; -import org.apache.wicket.request.Response; -import org.apache.wicket.request.cycle.RequestCycle; -import org.apache.wicket.response.NullResponse; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -139,6 +132,12 @@ public class Enclosure extends WebMarkup return childComponent; } + @Override + public boolean isVisible() + { + return childComponent.determineVisibility() && super.isVisible(); + } + /** * Get the real parent container * @@ -160,48 +159,6 @@ public class Enclosure extends WebMarkup return parent; } - @Override - public void onComponentTagBody(final MarkupStream markupStream, final ComponentTag openTag) - { - // TODO this is where I wish we had something like "enum(TAG, BODY, NONE, ALL) isVisible()" - // set the enclosure visibility - boolean visible = childComponent.determineVisibility(); - - // We want to know which components are rendered inside the enclosure - final IComponentOnAfterRenderListener listener = new EnclosureListener(this); - - try - { - // register the listener - getApplication().getComponentOnAfterRenderListeners().add(listener); - - if (visible) - { - super.onComponentTagBody(markupStream, openTag); - } - else - { - RequestCycle cycle = getRequestCycle(); - Response response = cycle.getResponse(); - try - { - cycle.setResponse(NullResponse.getInstance()); - - super.onComponentTagBody(markupStream, openTag); - } - finally - { - cycle.setResponse(response); - } - } - } - finally - { - // make sure we remove the listener - getApplication().getComponentOnAfterRenderListeners().remove(listener); - } - } - /** * @param markupStream * @param container @@ -276,31 +233,4 @@ public class Enclosure extends WebMarkup "Programming error: childComponent == enclose component; endless loop"); } } - - /** - * Enclosure will register this listener during the body render phase of the Enclosure - */ - private static class EnclosureListener implements IComponentOnAfterRenderListener - { - private final Enclosure enclosure; - - private EnclosureListener(final Enclosure enclosure) - { - this.enclosure = enclosure; - } - - public void onAfterRender(final Component component) - { - if (log.isWarnEnabled()) - { - if ((component instanceof FormComponent) || - (component instanceof IFormSubmittingComponent) || (component instanceof Form)) - { - log.warn("Please note that onBeforeRender() and validate() might be called on invisible components inside an Enclosure. " + - "Please see EnclosureContainer for an alternative. Enclosure: " + - enclosure.toString()); - } - } - } - } } Modified: wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePageExpectedResult_1.html URL: http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePageExpectedResult_1.html?rev=1142411&r1=1142410&r2=1142411&view=diff ============================================================================== --- wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePageExpectedResult_1.html (original) +++ wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePageExpectedResult_1.html Sun Jul 3 10:42:04 2011 @@ -8,7 +8,7 @@ <table><tr><span wicket:id="label2">Test Label 2</span></tr></table> </wicket:enclosure> - <wicket:enclosure child="label3"></wicket:enclosure> + <wicket:enclosure child="label6"> <table><tr><span wicket:id="label4">Test Label 2</span></tr></table> Added: wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePageExpectedResult_12.html URL: http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePageExpectedResult_12.html?rev=1142411&view=auto ============================================================================== --- wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePageExpectedResult_12.html (added) +++ wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePageExpectedResult_12.html Sun Jul 3 10:42:04 2011 @@ -0,0 +1,6 @@ +<!DOCTYPE html> +<html xmlns:wicket="http://wicket.apache.org"> +<body> + +</body> +</html> Added: wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePageExpectedResult_13.html URL: http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePageExpectedResult_13.html?rev=1142411&view=auto ============================================================================== --- wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePageExpectedResult_13.html (added) +++ wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePageExpectedResult_13.html Sun Jul 3 10:42:04 2011 @@ -0,0 +1,6 @@ +<!DOCTYPE html> +<html xmlns:wicket="http://wicket.apache.org"> +<body> + +</body> +</html> Modified: wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePageExpectedResult_2.html URL: http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePageExpectedResult_2.html?rev=1142411&r1=1142410&r2=1142411&view=diff ============================================================================== --- wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePageExpectedResult_2.html (original) +++ wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePageExpectedResult_2.html Sun Jul 3 10:42:04 2011 @@ -4,7 +4,7 @@ <h3>Example 3 using wicket:enclosure</h3> <span wicket:id="label1">label 1</span><br /> <span wicket:id="label2">label 2</span><br /> - <wicket:enclosure child="label3"></wicket:enclosure> + </div> </body> </html> Modified: wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePageExpectedResult_4.html URL: http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePageExpectedResult_4.html?rev=1142411&r1=1142410&r2=1142411&view=diff ============================================================================== --- wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePageExpectedResult_4.html (original) +++ wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePageExpectedResult_4.html Sun Jul 3 10:42:04 2011 @@ -1,5 +1,5 @@ <html xmlns:wicket> <body> - <wicket:enclosure child="foo:bar"></wicket:enclosure> + </body> </html> Modified: wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePageExpectedResult_5.html URL: http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePageExpectedResult_5.html?rev=1142411&r1=1142410&r2=1142411&view=diff ============================================================================== --- wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePageExpectedResult_5.html (original) +++ wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePageExpectedResult_5.html Sun Jul 3 10:42:04 2011 @@ -2,7 +2,7 @@ <body> This is in the super markup.<br> <wicket:child><wicket:extend> - <wicket:enclosure child="foo:bar"></wicket:enclosure> + </wicket:extend></wicket:child> This is in the super markup.<br> </body> Modified: wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePageExpectedResult_9-1.html URL: http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePageExpectedResult_9-1.html?rev=1142411&r1=1142410&r2=1142411&view=diff ============================================================================== --- wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePageExpectedResult_9-1.html (original) +++ wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePageExpectedResult_9-1.html Sun Jul 3 10:42:04 2011 @@ -2,7 +2,7 @@ <body> <form wicket:id="form" id="form1" method="post" action="page?1-1.IFormSubmitListener-form"><div style="width:0px;height:0px;position:absolute;left:-100px;top:-100px;overflow:hidden"><input type="hidden" name="form1_hf_0" id="form1_hf_0" /></div> <!-- does Wicket behave different if the enclosure child is a FormComponent?? Needs testing --> - <wicket:enclosure child="label"></wicket:enclosure> + </form> </body> </html> Modified: wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePageExpectedResult_9-2-1.html URL: http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePageExpectedResult_9-2-1.html?rev=1142411&r1=1142410&r2=1142411&view=diff ============================================================================== --- wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePageExpectedResult_9-2-1.html (original) +++ wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePageExpectedResult_9-2-1.html Sun Jul 3 10:42:04 2011 @@ -2,7 +2,7 @@ <body> <form wicket:id="form" id="form1" method="post" action="page?2-1.IFormSubmitListener-form"><div style="width:0px;height:0px;position:absolute;left:-100px;top:-100px;overflow:hidden"><input type="hidden" name="form1_hf_0" id="form1_hf_0" /></div> <!-- does Wicket behave different if the enclosure child is a FormComponent?? Needs testing --> - <wicket:enclosure child="label"></wicket:enclosure> + </form> </body> </html> Modified: wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePageExpectedResult_9-2.html URL: http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePageExpectedResult_9-2.html?rev=1142411&r1=1142410&r2=1142411&view=diff ============================================================================== --- wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePageExpectedResult_9-2.html (original) +++ wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePageExpectedResult_9-2.html Sun Jul 3 10:42:04 2011 @@ -1,8 +1,8 @@ -<html xmlns:wicket> -<body> - <form wicket:id="form" id="form1" method="post" action="page?4-1.IFormSubmitListener-form"><div style="width:0px;height:0px;position:absolute;left:-100px;top:-100px;overflow:hidden"><input type="hidden" name="form1_hf_0" id="form1_hf_0" /></div> - <!-- does Wicket behave different if the enclosure child is a FormComponent?? Needs testing --> - <wicket:enclosure child="label"></wicket:enclosure> - </form> -</body> -</html> +<html xmlns:wicket> +<body> + <form wicket:id="form" id="form1" method="post" action="page?4-1.IFormSubmitListener-form"><div style="width:0px;height:0px;position:absolute;left:-100px;top:-100px;overflow:hidden"><input type="hidden" name="form1_hf_0" id="form1_hf_0" /></div> + <!-- does Wicket behave different if the enclosure child is a FormComponent?? Needs testing --> + + </form> +</body> +</html> Added: wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePage_12.html URL: http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePage_12.html?rev=1142411&view=auto ============================================================================== --- wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePage_12.html (added) +++ wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePage_12.html Sun Jul 3 10:42:04 2011 @@ -0,0 +1,12 @@ +<!DOCTYPE html> +<html xmlns:wicket="http://wicket.apache.org"> +<body> + <wicket:enclosure child="invisible"> + This entire enclosure should be hidden. + <p wicket:id="invisible"></p> + <p wicket:id="shouldntrendereither"> + <span wicket:id="label"></span> + </p> + </wicket:enclosure> +</body> +</html> Added: wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePage_12.java URL: http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePage_12.java?rev=1142411&view=auto ============================================================================== --- wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePage_12.java (added) +++ wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePage_12.java Sun Jul 3 10:42:04 2011 @@ -0,0 +1,61 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.wicket.markup.html.internal; + +import org.apache.wicket.markup.html.WebMarkupContainer; +import org.apache.wicket.markup.html.WebPage; +import org.apache.wicket.markup.html.basic.Label; +import org.apache.wicket.model.PropertyModel; +import org.apache.wicket.request.mapper.parameter.PageParameters; + +/** */ +public class EnclosurePage_12 extends WebPage +{ + private static final long serialVersionUID = 1L; + + /** + * Construct. + * + * @param parameters + */ + public EnclosurePage_12(final PageParameters parameters) + { + add(new Label("version", getApplication().getFrameworkSettings().getVersion())); + // TODO Add your page's components here + + // Here are two components. + + // Both are contained within <wicket:enclosure child="invisible">. + // Since the "invisible" component is explicitly hidden, the expecation is + // that the whole enclosure will be hidden as well. Furthermore this implies + // that none of the components within the enclosure will be rendered. + + // However this is not the case. Even though the "shouldntrendereither" + // component is in the same enclosure and therefore should not be rendered, + // Wicket attempts to render it. This is evidenced by the fact that we've + // purposely included a Label that will blow up when its model is loaded. + + // When this page is loaded we get the exception: + // WicketRuntimeException: ... nonexistentprop + + // Wicket 1.4.x does not have this problem. + + add(new WebMarkupContainer("invisible").setVisible(false)); + add(new WebMarkupContainer("shouldntrendereither").add(new Label("label", + new PropertyModel<String>(this, "nonexistentprop")))); + } +} Added: wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePage_13.html URL: http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePage_13.html?rev=1142411&view=auto ============================================================================== --- wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePage_13.html (added) +++ wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePage_13.html Sun Jul 3 10:42:04 2011 @@ -0,0 +1,12 @@ +<!DOCTYPE html> +<html xmlns:wicket="http://wicket.apache.org"> +<body> + <wicket:enclosure child="invisible"> + This entire enclosure should be hidden. + <p wicket:id="invisible"></p> + <p wicket:id="shouldntrendereither"> + <span wicket:id="label"></span> + </p> + </wicket:enclosure> +</body> +</html> Added: wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePage_13.java URL: http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePage_13.java?rev=1142411&view=auto ============================================================================== --- wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePage_13.java (added) +++ wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePage_13.java Sun Jul 3 10:42:04 2011 @@ -0,0 +1,63 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.wicket.markup.html.internal; + +import org.apache.wicket.markup.html.WebMarkupContainer; +import org.apache.wicket.markup.html.WebPage; +import org.apache.wicket.markup.html.basic.Label; +import org.apache.wicket.model.PropertyModel; +import org.apache.wicket.request.mapper.parameter.PageParameters; + + +/** */ +public class EnclosurePage_13 extends WebPage +{ + private static final long serialVersionUID = 1L; + + /** + * Construct. + * + * @param parameters + */ + public EnclosurePage_13(final PageParameters parameters) + { + add(new Label("version", getApplication().getFrameworkSettings().getVersion())); + // TODO Add your page's components here + + // Here are two components. + + // Both are contained within <wicket:enclosure child="invisible">. + // Since the "invisible" component is hidden (in this case due to + // isRenderAllowed() == false), the expecation is + // that the whole enclosure will be hidden as well. Furthermore this implies + // that none of the components within the enclosure will be rendered. + + // However this is not the case. Even though the "shouldntrendereither" + // component is in the same enclosure and therefore should not be rendered, + // Wicket attempts to render it. This is evidenced by the fact that we've + // purposely included a Label that will blow up when its model is loaded. + + // When this page is loaded we get the exception: + // WicketRuntimeException: ... nonexistentprop + + // Wicket 1.4.x does not have this problem. + + add(new SecuredContainer_13("invisible")); + add(new WebMarkupContainer("shouldntrendereither").add(new Label("label", + new PropertyModel<String>(this, "nonexistentprop")))); + } +} Modified: wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/EnclosureTest.java URL: http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/EnclosureTest.java?rev=1142411&r1=1142410&r2=1142411&view=diff ============================================================================== --- wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/EnclosureTest.java (original) +++ wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/EnclosureTest.java Sun Jul 3 10:42:04 2011 @@ -18,12 +18,18 @@ package org.apache.wicket.markup.html.in import java.io.IOException; +import org.apache.wicket.Component; import org.apache.wicket.Page; import org.apache.wicket.WicketTestCase; +import org.apache.wicket.authorization.Action; +import org.apache.wicket.authorization.IAuthorizationStrategy; import org.apache.wicket.markup.html.form.CheckBox; +import org.apache.wicket.mock.MockApplication; +import org.apache.wicket.request.component.IRequestableComponent; import org.apache.wicket.request.mapper.parameter.PageParameters; import org.apache.wicket.util.tester.DiffUtil; import org.apache.wicket.util.tester.FormTester; +import org.apache.wicket.util.tester.WicketTester; /** @@ -301,4 +307,44 @@ public class EnclosureTest extends Wicke { executeTest(EnclosurePage_11.class, "EnclosurePageExpectedResult_11.html"); } + + /** + * @throws Exception + */ + public void testRenderPage12() throws Exception + { + executeTest(EnclosurePage_12.class, "EnclosurePageExpectedResult_12.html"); + } + + /** + * @throws Exception + */ + public void testRenderPage13() throws Exception + { + tester = new WicketTester(new MockApplication() + { + @Override + protected void init() + { + super.init(); + + // This should cause all SecuredContainer components to be hidden + getSecuritySettings().setAuthorizationStrategy(new IAuthorizationStrategy() + { + public boolean isActionAuthorized(Component component, Action action) + { + return !(component instanceof SecuredContainer_13); + } + + public <T extends IRequestableComponent> boolean isInstantiationAuthorized( + Class<T> componentClass) + { + return true; + } + }); + } + }); + + executeTest(EnclosurePage_13.class, "EnclosurePageExpectedResult_13.html"); + } } Modified: wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/InlineEnclosurePageExpectedResult_1.html URL: http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/InlineEnclosurePageExpectedResult_1.html?rev=1142411&r1=1142410&r2=1142411&view=diff ============================================================================== --- wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/InlineEnclosurePageExpectedResult_1.html (original) +++ wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/InlineEnclosurePageExpectedResult_1.html Sun Jul 3 10:42:04 2011 @@ -11,7 +11,7 @@ </table> </div> -<span id="InlineEnclosure-3"></span> +<span id="InlineEnclosure-3" style="display:none"></span> <div id="InlineEnclosure-4"> <table> Added: wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/SecuredContainer_13.java URL: http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/SecuredContainer_13.java?rev=1142411&view=auto ============================================================================== --- wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/SecuredContainer_13.java (added) +++ wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/SecuredContainer_13.java Sun Jul 3 10:42:04 2011 @@ -0,0 +1,35 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.wicket.markup.html.internal; + +import org.apache.wicket.markup.html.WebMarkupContainer; + +/** */ +public class SecuredContainer_13 extends WebMarkupContainer +{ + private static final long serialVersionUID = 1L; + + /** + * Construct. + * + * @param id + */ + public SecuredContainer_13(String id) + { + super(id); + } +}