You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by sv...@apache.org on 2016/04/24 20:38:21 UTC
[04/12] wicket git commit: WICKET-6129 let requestcycle execute
scheduled and replaced handlers
WICKET-6129 let requestcycle execute scheduled and replaced handlers
Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/c21edea3
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/c21edea3
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/c21edea3
Branch: refs/heads/master
Commit: c21edea380141297048001ccd03ee28a31924685
Parents: f2f0ba0
Author: Sven Meier <sv...@apache.org>
Authored: Wed Mar 23 10:46:22 2016 +0100
Committer: Sven Meier <sv...@apache.org>
Committed: Sun Apr 24 20:00:54 2016 +0200
----------------------------------------------------------------------
.../wicket/request/cycle/RequestCycle.java | 30 +++++++++++---------
.../MultiRequestCycleListenerCallOrderTest.java | 4 +++
.../wicket/request/RequestHandlerStack.java | 19 +++----------
3 files changed, 25 insertions(+), 28 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/wicket/blob/c21edea3/wicket-core/src/main/java/org/apache/wicket/request/cycle/RequestCycle.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/request/cycle/RequestCycle.java b/wicket-core/src/main/java/org/apache/wicket/request/cycle/RequestCycle.java
index cdd9cc5..f3ed05d 100644
--- a/wicket-core/src/main/java/org/apache/wicket/request/cycle/RequestCycle.java
+++ b/wicket-core/src/main/java/org/apache/wicket/request/cycle/RequestCycle.java
@@ -259,22 +259,26 @@ public class RequestCycle implements IRequestCycle, IEventSink
{
Args.notNull(handler, "handler");
- try
- {
- listeners.onRequestHandlerResolved(this, handler);
- requestHandlerExecutor.execute(handler);
- listeners.onRequestHandlerExecuted(this, handler);
- }
- catch (RuntimeException e)
- {
- IRequestHandler replacement = requestHandlerExecutor.resolveHandler(e);
- if (replacement != null)
+ while (handler != null) {
+ try
{
- execute(replacement);
+ listeners.onRequestHandlerResolved(this, handler);
+ IRequestHandler next = requestHandlerExecutor.execute(handler);
+ listeners.onRequestHandlerExecuted(this, handler);
+
+ handler = next;
}
- else
+ catch (RuntimeException e)
{
- throw e;
+ IRequestHandler replacement = requestHandlerExecutor.resolveHandler(e);
+ if (replacement != null)
+ {
+ handler = replacement;
+ }
+ else
+ {
+ throw e;
+ }
}
}
}
http://git-wip-us.apache.org/repos/asf/wicket/blob/c21edea3/wicket-core/src/test/java/org/apache/wicket/request/cycle/MultiRequestCycleListenerCallOrderTest.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/test/java/org/apache/wicket/request/cycle/MultiRequestCycleListenerCallOrderTest.java b/wicket-core/src/test/java/org/apache/wicket/request/cycle/MultiRequestCycleListenerCallOrderTest.java
index 725cbf1..ca203df 100644
--- a/wicket-core/src/test/java/org/apache/wicket/request/cycle/MultiRequestCycleListenerCallOrderTest.java
+++ b/wicket-core/src/test/java/org/apache/wicket/request/cycle/MultiRequestCycleListenerCallOrderTest.java
@@ -119,6 +119,8 @@ public class MultiRequestCycleListenerCallOrderTest extends WicketTestCase
"first.onRequestHandlerResolved", "second.onRequestHandlerResolved",
"first.onRequestHandlerScheduled", "second.onRequestHandlerScheduled",
"first.onRequestHandlerExecuted", "second.onRequestHandlerExecuted",
+ "first.onRequestHandlerResolved", "second.onRequestHandlerResolved",
+ "first.onRequestHandlerExecuted", "second.onRequestHandlerExecuted",
"second.onEndRequest", "first.onEndRequest", "second.onDetach", "first.onDetach");
List<String> redirectRequest = asList("first.onBeginRequest", "second.onBeginRequest",
"first.onRequestHandlerResolved", "second.onRequestHandlerResolved",
@@ -150,6 +152,8 @@ public class MultiRequestCycleListenerCallOrderTest extends WicketTestCase
"first.onRequestHandlerResolved", "second.onRequestHandlerResolved",
"first.onRequestHandlerScheduled", "second.onRequestHandlerScheduled",
"first.onRequestHandlerExecuted", "second.onRequestHandlerExecuted",
+ "first.onRequestHandlerResolved", "second.onRequestHandlerResolved",
+ "first.onRequestHandlerExecuted", "second.onRequestHandlerExecuted",
"second.onEndRequest", "first.onEndRequest", "second.onDetach", "first.onDetach");
// with ajax requests we don't expect a redirect
http://git-wip-us.apache.org/repos/asf/wicket/blob/c21edea3/wicket-request/src/main/java/org/apache/wicket/request/RequestHandlerStack.java
----------------------------------------------------------------------
diff --git a/wicket-request/src/main/java/org/apache/wicket/request/RequestHandlerStack.java b/wicket-request/src/main/java/org/apache/wicket/request/RequestHandlerStack.java
index e3cbb33..6657a07 100644
--- a/wicket-request/src/main/java/org/apache/wicket/request/RequestHandlerStack.java
+++ b/wicket-request/src/main/java/org/apache/wicket/request/RequestHandlerStack.java
@@ -53,12 +53,9 @@ public abstract class RequestHandlerStack
/**
* @param handler
*/
- public void execute(final IRequestHandler handler)
+ public IRequestHandler execute(final IRequestHandler handler)
{
- final boolean first = requestHandlers.isEmpty();
requestHandlers.add(handler);
-
- IRequestHandler replacementHandler = null;
try
{
respond(handler);
@@ -73,11 +70,11 @@ public abstract class RequestHandlerStack
throw exception;
}
- if (replacer.removeAll && !first)
+ if (replacer.removeAll)
{
+ scheduledAfterCurrent = null;
throw exception;
}
- replacementHandler = replacer.replacementRequestHandler;
}
finally
{
@@ -87,15 +84,7 @@ public abstract class RequestHandlerStack
IRequestHandler scheduled = scheduledAfterCurrent;
scheduledAfterCurrent = null;
-
- if (replacementHandler != null)
- {
- execute(replacementHandler);
- }
- else if (scheduled != null)
- {
- execute(scheduled);
- }
+ return scheduled;
}
/**