Author: jdonnerstag
Date: Sun Oct 18 08:32:15 2009
New Revision: 826374
URL: http://svn.apache.org/viewvc?rev=826374&view=rev
Log:
making progress on MarkupFragment: you only need to call Component.render() now
irrespective of Page or AJAX or ... simply call render(). And it takes care of
prepareForRender() and afterRender() as well.
Modified:
wicket/trunk/wicket/src/main/java/org/apache/wicket/Component.java
wicket/trunk/wicket/src/main/java/org/apache/wicket/MarkupContainer.java
wicket/trunk/wicket/src/main/java/org/apache/wicket/Page.java
wicket/trunk/wicket/src/main/java/org/apache/wicket/ajax/AjaxRequestTarget.java
wicket/trunk/wicket/src/main/java/org/apache/wicket/protocol/http/WebRequestCycle.java
wicket/trunk/wicket/src/main/java/org/apache/wicket/request/target/component/BookmarkableListenerInterfaceRequestTarget.java
wicket/trunk/wicket/src/main/java/org/apache/wicket/request/target/component/BookmarkablePageRequestTarget.java
wicket/trunk/wicket/src/main/java/org/apache/wicket/request/target/component/ComponentRequestTarget.java
wicket/trunk/wicket/src/main/java/org/apache/wicket/request/target/component/PageReferenceRequestTarget.java
wicket/trunk/wicket/src/main/java/org/apache/wicket/request/target/component/PageRequestTarget.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=826374&r1=826373&r2=826374&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 Oct
18 08:32:15 2009
@@ -2129,21 +2129,51 @@
}
/**
- * Performs a render of this component as part of a Page level render
process.
- * <p>
- * For component level re-render (e.g. AJAX) please call {...@link
#renderComponent()}. Though
- * render() does seem to work, it will fail for panel children.
+ * Render the Component.
*/
public final void render()
{
- // Allow currently invisible components to be re-rendered as
well
- MarkupStream markupStream = null;
- if (getParent() != null)
+ RuntimeException exception = null;
+
+ try
+ {
+ // Invoke prepareForRender only if this is the root
component to be rendered
+ MarkupContainer parent = getParent();
+ if ((parent == null) || (parent.getFlag(FLAG_RENDERING)
== false))
+ {
+ prepareForRender();
+ }
+
+ // Do the render
+ render(null);
+ }
+ catch (final RuntimeException ex)
+ {
+ // Remember it as the originating exception
+ exception = ex;
+ }
+ finally
{
- markupStream = findMarkupStream();
+ try
+ {
+ // Cleanup
+ afterRender();
+ }
+ catch (RuntimeException ex2)
+ {
+ // Only remember it if not already another
exception happened
+ if (exception == null)
+ {
+ exception = ex2;
+ }
+ }
}
- render(markupStream);
+ // Re-throw if needed
+ if (exception != null)
+ {
+ throw exception;
+ }
}
/**
@@ -2156,23 +2186,29 @@
*/
public final void render(MarkupStream markupStream)
{
+ // Remove/Cleanup when migrating to MarkupFragments. Only
needed as long as rendering is
+ // based on MarkupStream
if (getApplication().getMarkupFragmentEnabled())
{
// Step 1: Make sure there is a markup available for
the Component
IMarkupFragment markup = getMarkup();
if (!(this instanceof Page) && (markup == null))
{
- throw new IllegalArgumentException("jdo: Markup
not found: " + toString());
+ throw new
IllegalArgumentException("MarkupFragment not found: " + toString() +
+ ". Please see
Application.getMarkupFragmentEnabled() as well.");
}
// Step 2: A markup stream based on the markup should
yield the same result.
- if (markupStream != null)
+ if ((markupStream != null) || !(this instanceof Page))
{
MarkupStream ms = new MarkupStream(markup);
// We need to skip the component in the
original markup stream to avoid
// exceptions later on.
- markupStream.skipComponent();
+ if (markupStream != null)
+ {
+ markupStream.skipComponent();
+ }
// We want to use the new markup stream
markupStream = ms;
@@ -2289,48 +2325,6 @@
}
/**
- * Page.renderPage() is used to render a whole page. With AJAX however
it must be possible to
- * render any one component contained in a page. That is what this
method is for.
- * <p>
- * Note: it is not necessary that the page has previously been
rendered. But the component must
- * have been added (directly or indirectly) to a container with an
associated markup file (Page,
- * Panel or Border).
- */
- public final void renderComponent()
- {
- // If this Component is a Page
- if (this instanceof Page)
- {
- // Render as Page, with all the special logic that
entails
- ((Page)this).renderPage();
- }
- else
- {
- // Save the parent's markup stream to re-assign it at
the end
- MarkupContainer parent = getParent();
- MarkupStream originalMarkupStream =
parent.getMarkupStream();
- MarkupStream markupStream = locateMarkupStream();
-
- try
- {
- // Make sure that while rendering the markup
stream is found
- parent.setMarkupStream(markupStream);
-
- prepareForRender();
-
- // Render the component and all its children
- render(markupStream);
- }
- finally
- {
- // Make sure the original markup stream is back
in place
- parent.setMarkupStream(originalMarkupStream);
- afterRender();
- }
- }
- }
-
- /**
* THIS METHOD IS NOT PART OF THE WICKET PUBLIC API. DO NOT USE IT.
* <p>
* Renders the component at the current position in the given markup
stream. The method
@@ -2342,6 +2336,12 @@
*/
public final void renderComponent(final MarkupStream markupStream)
{
+ if (markupStream == null)
+ {
+ throw new NullPointerException(
+ "Parameter 'markupStream' must not be null.
Component: " + toString());
+ }
+
markupIndex = markupStream.getCurrentIndex();
// Get mutable copy of next tag
Modified:
wicket/trunk/wicket/src/main/java/org/apache/wicket/MarkupContainer.java
URL:
http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/MarkupContainer.java?rev=826374&r1=826373&r2=826374&view=diff
==============================================================================
--- wicket/trunk/wicket/src/main/java/org/apache/wicket/MarkupContainer.java
(original)
+++ wicket/trunk/wicket/src/main/java/org/apache/wicket/MarkupContainer.java
Sun Oct 18 08:32:15 2009
@@ -239,7 +239,7 @@
* stream to be used to render the component.
* @return True, if component has been added
*/
- public final boolean autoAdd(final Component component, final
MarkupStream markupStream)
+ public final boolean autoAdd(final Component component, MarkupStream
markupStream)
{
if (component == null)
{
@@ -260,12 +260,14 @@
{
if (markupStream == null)
{
- component.render();
- }
- else
- {
- component.render(markupStream);
+ // Allow currently invisible components to be
re-rendered as well
+ if (component.getParent() != null)
+ {
+ markupStream =
component.findMarkupStream();
+ }
}
+
+ component.render(markupStream);
}
finally
{
@@ -1561,6 +1563,11 @@
@Override
protected final MarkupStream findMarkupStream()
{
+ if (getApplication().getMarkupFragmentEnabled())
+ {
+ return new MarkupStream(getMarkup());
+ }
+
// Start here
MarkupContainer c = this;
Modified: wicket/trunk/wicket/src/main/java/org/apache/wicket/Page.java
URL:
http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/Page.java?rev=826374&r1=826373&r2=826374&view=diff
==============================================================================
--- wicket/trunk/wicket/src/main/java/org/apache/wicket/Page.java (original)
+++ wicket/trunk/wicket/src/main/java/org/apache/wicket/Page.java Sun Oct 18
08:32:15 2009
@@ -690,98 +690,6 @@
}
/**
- * THIS METHOD IS NOT PART OF THE WICKET PUBLIC API. DO NOT CALL IT.
- */
- public final void renderPage()
- {
- // first try to check if the page can be rendered:
- if (!isActionAuthorized(RENDER))
- {
- if (log.isDebugEnabled())
- {
- log.debug("Page not allowed to render: " +
this);
- }
- throw new UnauthorizedActionException(this,
Component.RENDER);
- }
-
- // Make sure it is really empty
- renderedComponents = null;
-
- // if the page is stateless, reset the flag so that it is
tested again
- if (Boolean.TRUE.equals(stateless))
- {
- stateless = null;
- }
-
- try
- {
- prepareForRender();
- }
- catch (RuntimeException e)
- {
- // if an exception is thrown then we have to call after
render
- // else the components could be in a wrong state
(rendering)
- try
- {
- afterRender();
- }
- catch (RuntimeException e2)
- {
- // ignore this one could be a result off.
- }
- throw e;
- }
-
-
- // Handle request by rendering page
- try
- {
- render(null);
- }
- finally
- {
- afterRender();
- }
-
- // Check rendering if it happened fully
- checkRendering(this);
-
- // clean up debug meta data if component check is on
- if (Application.get().getDebugSettings().getComponentUseCheck())
- {
- visitChildren(new IVisitor<Component>()
- {
- public Object component(Component component)
- {
-
component.setMetaData(Component.CONSTRUCTED_AT_KEY, null);
-
component.setMetaData(Component.ADDED_AT_KEY, null);
- return CONTINUE_TRAVERSAL;
- }
- });
- }
-
- if (!isPageStateless())
- {
- // trigger creation of the actual session in case it
was deferred
-
Session.get().getSessionStore().getSessionId(RequestCycle.get().getRequest(),
true);
- // Add/touch the response page in the session (its
pagemap).
- getSession().touch(this);
- }
-
- if
(getApplication().getDebugSettings().isOutputMarkupContainerClassName())
- {
- Class<?> klass = getClass();
- while (klass.isAnonymousClass())
- {
- klass = klass.getSuperclass();
- }
- getResponse().write("<!-- Page Class ");
- getResponse().write(klass.getName());
- getResponse().write(" -->\n");
- }
- }
-
- /**
* THIS METHOD IS NOT PART OF THE WICKET PUBLIC API. DO NOT CALL.
*
* Set the id for this Page. This method is called by PageMap when a
Page is added because the
@@ -1248,7 +1156,27 @@
@Override
protected void onBeforeRender()
{
+ // first try to check if the page can be rendered:
+ if (!isActionAuthorized(RENDER))
+ {
+ if (log.isDebugEnabled())
+ {
+ log.debug("Page not allowed to render: " +
this);
+ }
+ throw new UnauthorizedActionException(this,
Component.RENDER);
+ }
+
+ // Make sure it is really empty
+ renderedComponents = null;
+
+ // if the page is stateless, reset the flag so that it is
tested again
+ if (Boolean.TRUE.equals(stateless))
+ {
+ stateless = null;
+ }
+
super.onBeforeRender();
+
// If any of the components on page is not stateless, we need
to bind the session
// before we start rendering components, as then jsessionid
won't be appended
// for links rendered before first stateful component
@@ -1259,6 +1187,53 @@
}
/**
+ * @see org.apache.wicket.Component#onAfterRender()
+ */
+ @Override
+ protected void onAfterRender()
+ {
+ super.onAfterRender();
+
+ // Check rendering if it happened fully
+ checkRendering(this);
+
+ // clean up debug meta data if component check is on
+ if (Application.get().getDebugSettings().getComponentUseCheck())
+ {
+ visitChildren(new IVisitor<Component>()
+ {
+ public Object component(Component component)
+ {
+
component.setMetaData(Component.CONSTRUCTED_AT_KEY, null);
+
component.setMetaData(Component.ADDED_AT_KEY, null);
+ return CONTINUE_TRAVERSAL;
+ }
+ });
+ }
+
+ if (!isPageStateless())
+ {
+ // trigger creation of the actual session in case it
was deferred
+
Session.get().getSessionStore().getSessionId(RequestCycle.get().getRequest(),
true);
+
+ // Add/touch the response page in the session (its
pagemap).
+ getSession().touch(this);
+ }
+
+ if
(getApplication().getDebugSettings().isOutputMarkupContainerClassName())
+ {
+ Class<?> klass = getClass();
+ while (klass.isAnonymousClass())
+ {
+ klass = klass.getSuperclass();
+ }
+ getResponse().write("<!-- Page Class ");
+ getResponse().write(klass.getName());
+ getResponse().write(" -->\n");
+ }
+ }
+
+ /**
* @see org.apache.wicket.Component#onDetach()
*/
@Override
Modified:
wicket/trunk/wicket/src/main/java/org/apache/wicket/ajax/AjaxRequestTarget.java
URL:
http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/ajax/AjaxRequestTarget.java?rev=826374&r1=826373&r2=826374&view=diff
==============================================================================
---
wicket/trunk/wicket/src/main/java/org/apache/wicket/ajax/AjaxRequestTarget.java
(original)
+++
wicket/trunk/wicket/src/main/java/org/apache/wicket/ajax/AjaxRequestTarget.java
Sun Oct 18 08:32:15 2009
@@ -812,7 +812,7 @@
try
{
- component.renderComponent();
+ component.render();
}
catch (RuntimeException e)
{
Modified:
wicket/trunk/wicket/src/main/java/org/apache/wicket/protocol/http/WebRequestCycle.java
URL:
http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/protocol/http/WebRequestCycle.java?rev=826374&r1=826373&r2=826374&view=diff
==============================================================================
---
wicket/trunk/wicket/src/main/java/org/apache/wicket/protocol/http/WebRequestCycle.java
(original)
+++
wicket/trunk/wicket/src/main/java/org/apache/wicket/protocol/http/WebRequestCycle.java
Sun Oct 18 08:32:15 2009
@@ -163,7 +163,7 @@
setResponse(redirectResponse);
// render the page into the buffer
- page.renderPage();
+ page.render();
// re-assign the original response
setResponse(currentResponse);
Modified:
wicket/trunk/wicket/src/main/java/org/apache/wicket/request/target/component/BookmarkableListenerInterfaceRequestTarget.java
URL:
http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/request/target/component/BookmarkableListenerInterfaceRequestTarget.java?rev=826374&r1=826373&r2=826374&view=diff
==============================================================================
---
wicket/trunk/wicket/src/main/java/org/apache/wicket/request/target/component/BookmarkableListenerInterfaceRequestTarget.java
(original)
+++
wicket/trunk/wicket/src/main/java/org/apache/wicket/request/target/component/BookmarkableListenerInterfaceRequestTarget.java
Sun Oct 18 08:32:15 2009
@@ -174,7 +174,7 @@
else
{
// else render the page directly
- page.renderPage();
+ page.render();
}
}
Modified:
wicket/trunk/wicket/src/main/java/org/apache/wicket/request/target/component/BookmarkablePageRequestTarget.java
URL:
http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/request/target/component/BookmarkablePageRequestTarget.java?rev=826374&r1=826373&r2=826374&view=diff
==============================================================================
---
wicket/trunk/wicket/src/main/java/org/apache/wicket/request/target/component/BookmarkablePageRequestTarget.java
(original)
+++
wicket/trunk/wicket/src/main/java/org/apache/wicket/request/target/component/BookmarkablePageRequestTarget.java
Sun Oct 18 08:32:15 2009
@@ -259,7 +259,7 @@
else
{
// Let the page render itself
- getPage(requestCycle).renderPage();
+ getPage(requestCycle).render();
}
}
}
Modified:
wicket/trunk/wicket/src/main/java/org/apache/wicket/request/target/component/ComponentRequestTarget.java
URL:
http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/request/target/component/ComponentRequestTarget.java?rev=826374&r1=826373&r2=826374&view=diff
==============================================================================
---
wicket/trunk/wicket/src/main/java/org/apache/wicket/request/target/component/ComponentRequestTarget.java
(original)
+++
wicket/trunk/wicket/src/main/java/org/apache/wicket/request/target/component/ComponentRequestTarget.java
Sun Oct 18 08:32:15 2009
@@ -72,7 +72,7 @@
else
{
// Render the component
- component.renderComponent();
+ component.render();
}
}
finally
Modified:
wicket/trunk/wicket/src/main/java/org/apache/wicket/request/target/component/PageReferenceRequestTarget.java
URL:
http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/request/target/component/PageReferenceRequestTarget.java?rev=826374&r1=826373&r2=826374&view=diff
==============================================================================
---
wicket/trunk/wicket/src/main/java/org/apache/wicket/request/target/component/PageReferenceRequestTarget.java
(original)
+++
wicket/trunk/wicket/src/main/java/org/apache/wicket/request/target/component/PageReferenceRequestTarget.java
Sun Oct 18 08:32:15 2009
@@ -88,7 +88,7 @@
else
{
// Let page render itself
- page.renderPage();
+ page.render();
}
}
Modified:
wicket/trunk/wicket/src/main/java/org/apache/wicket/request/target/component/PageRequestTarget.java
URL:
http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/request/target/component/PageRequestTarget.java?rev=826374&r1=826373&r2=826374&view=diff
==============================================================================
---
wicket/trunk/wicket/src/main/java/org/apache/wicket/request/target/component/PageRequestTarget.java
(original)
+++
wicket/trunk/wicket/src/main/java/org/apache/wicket/request/target/component/PageRequestTarget.java
Sun Oct 18 08:32:15 2009
@@ -60,7 +60,7 @@
else
{
// Let page render itself
- page.renderPage();
+ page.render();
}
}