Author: jdonnerstag
Date: Sun Nov 8 21:57:50 2009
New Revision: 833935
URL: http://svn.apache.org/viewvc?rev=833935&view=rev
Log:
basically javadoc for Enclosure
Modified:
wicket/trunk/wicket/src/main/java/org/apache/wicket/Component.java
wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/internal/Enclosure.java
Modified: wicket/trunk/wicket/src/main/java/org/apache/wicket/Component.java
URL:
http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/Component.java?rev=833935&r1=833934&r2=833935&view=diff
==============================================================================
--- wicket/trunk/wicket/src/main/java/org/apache/wicket/Component.java
(original)
+++ wicket/trunk/wicket/src/main/java/org/apache/wicket/Component.java Sun Nov
8 21:57:50 2009
@@ -2157,7 +2157,7 @@
MarkupContainer parent = getParent();
if ((parent == null) || (parent.getFlag(FLAG_RENDERING)
== false) || isAuto())
{
- prepareForRender();
+ prepareForRender(true);
}
// Do the render
Modified:
wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/internal/Enclosure.java
URL:
http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/internal/Enclosure.java?rev=833935&r1=833934&r2=833935&view=diff
==============================================================================
---
wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/internal/Enclosure.java
(original)
+++
wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/internal/Enclosure.java
Sun Nov 8 21:57:50 2009
@@ -21,10 +21,15 @@
import org.apache.wicket.RequestCycle;
import org.apache.wicket.Response;
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.response.NullResponse;
import org.slf4j.Logger;
@@ -64,8 +69,15 @@
* }
* </pre>
*
+ * Please note that since a transparent auto-component is created for the tag,
the markup and the
+ * component hierarchy will not be in sync which leads to subtle differences
if your code relies on
+ * onBeforeRender() and validate() being called for the children inside the
enclosure tag. E.g. it
+ * might happen that onBeforeRender() and validate() gets called on invisible
components. In doubt,
+ * please fall back to {...@link EnclosureContainer}.
+ *
* @see EnclosureResolver
* @see EnclosureHandler
+ * @see EnclosureContainer
*
* @author Juergen Donnerstag
* @since 1.3
@@ -154,25 +166,39 @@
// set the enclosure visibility
boolean visible = controller.determineVisibility();
- if (visible)
- {
- super.onComponentTagBody(markupStream, openTag);
- }
- else
+ // We want to know which components are rendered inside the
enclosure
+ final IComponentOnAfterRenderListener listener = new
EnclosureListener(this);
+
+ try
{
- RequestCycle cycle = getRequestCycle();
- Response response = cycle.getResponse();
- try
- {
- cycle.setResponse(NullResponse.getInstance());
+ // register the listener
+
getApplication().addComponentOnAfterRenderListener(listener);
+ if (visible)
+ {
super.onComponentTagBody(markupStream, openTag);
}
- finally
+ else
{
- cycle.setResponse(response);
+ 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().removeComponentOnAfterRenderListener(listener);
+ }
}
/**
@@ -192,4 +218,34 @@
"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;
+ }
+
+ /**
+ * @see
org.apache.wicket.application.IComponentOnBeforeRenderListener#onBeforeRender(org.apache.wicket.Component)
+ */
+ 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());
+ }
+ }
+ }
+ }
}