Author: knopp
Date: Tue Dec 26 08:45:35 2006
New Revision: 490326
URL: http://svn.apache.org/viewvc?view=rev&rev=490326
Log:
Attach component on ajax render
Modified:
incubator/wicket/branches/wicket-1.x/wicket/src/main/java/wicket/ajax/AjaxRequestTarget.java
incubator/wicket/branches/wicket-1.x/wicket/src/main/java/wicket/protocol/http/portlet/PortletRenderResponseStrategy.java
incubator/wicket/branches/wicket-1.x/wicket/src/main/java/wicket/request/target/component/ComponentRequestTarget.java
Modified:
incubator/wicket/branches/wicket-1.x/wicket/src/main/java/wicket/ajax/AjaxRequestTarget.java
URL:
http://svn.apache.org/viewvc/incubator/wicket/branches/wicket-1.x/wicket/src/main/java/wicket/ajax/AjaxRequestTarget.java?view=diff&rev=490326&r1=490325&r2=490326
==============================================================================
---
incubator/wicket/branches/wicket-1.x/wicket/src/main/java/wicket/ajax/AjaxRequestTarget.java
(original)
+++
incubator/wicket/branches/wicket-1.x/wicket/src/main/java/wicket/ajax/AjaxRequestTarget.java
Tue Dec 26 08:45:35 2006
@@ -34,6 +34,8 @@
import wicket.Page;
import wicket.RequestCycle;
import wicket.Response;
+import wicket.Component.IVisitor;
+import wicket.feedback.IFeedback;
import wicket.markup.html.internal.HtmlHeaderContainer;
import wicket.markup.parser.filter.HtmlHeaderSectionHandler;
import wicket.protocol.http.WebResponse;
@@ -361,15 +363,8 @@
respondInvocation(response, js);
}
- it = markupIdToComponent.entrySet().iterator();
- while (it.hasNext())
- {
- final Map.Entry entry = (Entry)it.next();
- final Component component =
(Component)entry.getValue();
- final String markupId = (String)entry.getKey();
-
- respondComponent(response, markupId, component);
- }
+ // process added components
+ respondComponents(response);
it = appendJavascripts.iterator();
while (it.hasNext())
@@ -390,6 +385,80 @@
}
}
+
+ /**
+ * Processes components added to the target. This involves attaching
+ * components, rendering markup into a client side xml envelope, and
+ * detaching them
+ *
+ * @param response
+ */
+ private void respondComponents(WebResponse response)
+ {
+ Iterator it;
+
+ try
+ {
+ // process feedback
+ it = markupIdToComponent.entrySet().iterator();
+ while (it.hasNext())
+ {
+ final Component component =
(Component)((Entry)it.next()).getValue();
+ if (component instanceof MarkupContainer)
+ {
+ MarkupContainer container =
(MarkupContainer)component;
+
+ // collect feedback
+
container.visitChildren(IFeedback.class, new IVisitor()
+ {
+ public Object
component(Component component)
+ {
+
((IFeedback)component).updateFeedback();
+ return
IVisitor.CONTINUE_TRAVERSAL;
+ }
+ });
+ }
+
+ if (component instanceof IFeedback)
+ {
+ ((IFeedback)component).updateFeedback();
+ }
+ }
+
+ // attach components
+ it = markupIdToComponent.entrySet().iterator();
+ while (it.hasNext())
+ {
+ final Component component =
(Component)((Entry)it.next()).getValue();
+ component.internalAttach();
+ }
+
+ // process component markup
+ it = markupIdToComponent.entrySet().iterator();
+ while (it.hasNext())
+ {
+ final Map.Entry entry = (Entry)it.next();
+ final Component component =
(Component)entry.getValue();
+ final String markupId = (String)entry.getKey();
+
+ respondComponent(response, markupId, component);
+ }
+
+ }
+ finally
+ {
+ // detach
+ it = markupIdToComponent.entrySet().iterator();
+ while (it.hasNext())
+ {
+ final Component component =
(Component)((Entry)it.next()).getValue();
+ component.getPage().internalDetach();
+ // we are done since we detached the page
+ break;
+ }
+ }
+ }
+
/**
* @see java.lang.Object#toString()
*/
Modified:
incubator/wicket/branches/wicket-1.x/wicket/src/main/java/wicket/protocol/http/portlet/PortletRenderResponseStrategy.java
URL:
http://svn.apache.org/viewvc/incubator/wicket/branches/wicket-1.x/wicket/src/main/java/wicket/protocol/http/portlet/PortletRenderResponseStrategy.java?view=diff&rev=490326&r1=490325&r2=490326
==============================================================================
---
incubator/wicket/branches/wicket-1.x/wicket/src/main/java/wicket/protocol/http/portlet/PortletRenderResponseStrategy.java
(original)
+++
incubator/wicket/branches/wicket-1.x/wicket/src/main/java/wicket/protocol/http/portlet/PortletRenderResponseStrategy.java
Tue Dec 26 08:45:35 2006
@@ -25,16 +25,18 @@
import wicket.Page;
import wicket.RequestCycle;
import wicket.Response;
+import wicket.Component.IVisitor;
+import wicket.feedback.IFeedback;
import wicket.markup.html.internal.HtmlHeaderContainer;
import wicket.markup.parser.filter.HtmlHeaderSectionHandler;
import wicket.request.compound.IResponseStrategy;
import wicket.request.target.component.PageRequestTarget;
/**
- * Portlet render ResponseStrategy handles outputting of the header
contributions
- * into the response.
+ * Portlet render ResponseStrategy handles outputting of the header
+ * contributions into the response.
*
- * Portlets do not support real header contribution.
+ * Portlets do not support real header contribution.
*
* @author Janne Hietamäki
*/
@@ -50,23 +52,24 @@
if (requestTarget != null)
{
Application.get().logResponseTarget(requestTarget);
- respondHeaderContribution(requestCycle,requestTarget);
+ respondHeaderContribution(requestCycle, requestTarget);
requestTarget.respond(requestCycle);
}
}
- private void respondHeaderContribution(final RequestCycle
requestCycle,final IRequestTarget requestTarget)
+ private void respondHeaderContribution(final RequestCycle requestCycle,
+ final IRequestTarget requestTarget)
{
- if(requestTarget instanceof PageRequestTarget)
+ if (requestTarget instanceof PageRequestTarget)
{
- final PageRequestTarget
target=(PageRequestTarget)requestTarget;
+ final PageRequestTarget target =
(PageRequestTarget)requestTarget;
final Response response =
RequestCycle.get().getResponse();
- final Page page=target.getPage();
+ final Page page = target.getPage();
final HtmlHeaderContainer header = new
HtmlHeaderContainer(
HtmlHeaderSectionHandler.HEADER_ID);
- if(page.get(HtmlHeaderSectionHandler.HEADER_ID) != null)
+ if (page.get(HtmlHeaderSectionHandler.HEADER_ID) !=
null)
{
page.replace(header);
}
@@ -92,16 +95,42 @@
});
- header.visitChildren(new Component.IVisitor()
+ // collect feedback, is this really necessary for a
header
+ // container?
+ header.visitChildren(IFeedback.class, new IVisitor()
{
public Object component(Component component)
{
- page.startComponentRender(component);
- component.renderComponent();
- page.endComponentRender(component);
- return CONTINUE_TRAVERSAL;
+ ((IFeedback)component).updateFeedback();
+ return IVisitor.CONTINUE_TRAVERSAL;
}
});
+
+ if (header instanceof IFeedback)
+ {
+ ((IFeedback)header).updateFeedback();
+ }
+
+ header.internalAttach();
+
+ try
+ {
+ header.visitChildren(new Component.IVisitor()
+ {
+ public Object component(Component
component)
+ {
+
page.startComponentRender(component);
+ component.renderComponent();
+
page.endComponentRender(component);
+ return CONTINUE_TRAVERSAL;
+ }
+ });
+ }
+ finally
+ {
+ header.internalDetach();
+ }
+
page.remove(header);
}
}
Modified:
incubator/wicket/branches/wicket-1.x/wicket/src/main/java/wicket/request/target/component/ComponentRequestTarget.java
URL:
http://svn.apache.org/viewvc/incubator/wicket/branches/wicket-1.x/wicket/src/main/java/wicket/request/target/component/ComponentRequestTarget.java?view=diff&rev=490326&r1=490325&r2=490326
==============================================================================
---
incubator/wicket/branches/wicket-1.x/wicket/src/main/java/wicket/request/target/component/ComponentRequestTarget.java
(original)
+++
incubator/wicket/branches/wicket-1.x/wicket/src/main/java/wicket/request/target/component/ComponentRequestTarget.java
Tue Dec 26 08:45:35 2006
@@ -17,8 +17,11 @@
package wicket.request.target.component;
import wicket.Component;
+import wicket.MarkupContainer;
import wicket.Page;
import wicket.RequestCycle;
+import wicket.Component.IVisitor;
+import wicket.feedback.IFeedback;
/**
* Default implementation of [EMAIL PROTECTED]
wicket.request.target.component.IComponentRequestTarget}.
@@ -68,7 +71,38 @@
else
{
// Render the component
- component.renderComponent();
+ try
+ {
+ // collect feedback
+ if (component instanceof MarkupContainer)
+ {
+ MarkupContainer container =
(MarkupContainer)component;
+
+
container.visitChildren(IFeedback.class, new IVisitor()
+ {
+ public Object
component(Component component)
+ {
+
((IFeedback)component).updateFeedback();
+ return
IVisitor.CONTINUE_TRAVERSAL;
+ }
+ });
+ }
+
+ if (component instanceof IFeedback)
+ {
+ ((IFeedback)component).updateFeedback();
+ }
+
+ // attach
+ component.internalAttach();
+
+ // Render the component
+ component.renderComponent();
+ }
+ finally
+ {
+ component.getPage().internalDetach();
+ }
}
if (page != null)