Thanks,
+ if (isPageStateless(page) == false)
+ {
+ // last opportunity to create a session
+ context.getSessionId(true);
break ?
good point.
+ * End the current context.
+ *
+ * @param context
+ */
+ default void end(IPageContext context)
again endRequest(IPageContext) ?
I thought about that, but IMHO this method name fits better with the other methods.
But I don't care too much about the name either.
Regards
Sven
On 09.11.20 07:15, Martin Grigorov wrote:
Hi,
Few small comments inline.
On Fri, Nov 6, 2020 at 7:38 PM <svenme...@apache.org> wrote:
This is an automated email from the ASF dual-hosted git repository.
svenmeier pushed a commit to branch WICKET-6847-onEndRequest-before-flush
in repository https://gitbox.apache.org/repos/asf/wicket.git
commit 15a6cedfb8b855c004b2ece201d9eac063ef770e
Author: Sven Meier <svenme...@apache.org>
AuthorDate: Fri Nov 6 18:36:16 2020 +0100
WICKET-6847 onEndRequest before flush
allows RequestPageStore to check for stateful pages
---
pom.xml | 12 ++++++++++++
.../src/main/java/org/apache/wicket/Application.java | 6 ++++++
.../java/org/apache/wicket/page/IPageManager.java | 6 ++++++
.../java/org/apache/wicket/page/PageManager.java | 6 ++++++
.../apache/wicket/pageStore/DelegatingPageStore.java | 6 ++++++
.../java/org/apache/wicket/pageStore/IPageStore.java | 9 +++++++++
.../apache/wicket/pageStore/RequestPageStore.java | 19
++++++++++++++-----
.../apache/wicket/request/cycle/RequestCycle.java | 20
++++++++++----------
8 files changed, 69 insertions(+), 15 deletions(-)
diff --git a/pom.xml b/pom.xml
index 0c7cfd5..4e0c912 100644
--- a/pom.xml
+++ b/pom.xml
@@ -1133,6 +1133,18 @@
<comparisonVersion>9.0.0</comparisonVersion>
<failOnError>true</failOnError>
<logResults>true</logResults>
+ <ignored>
+ <difference>
+
<differenceType>7012</differenceType>
+
<className>org/apache/wicket/page/IPageManager</className>
+
<method>void end()</method>
+ </difference>
+ <difference>
+
<differenceType>7012</differenceType>
+
<className>org/apache/wicket/pageStore/IPageStore</className>
+
<method>void end(org.apache.wicket.pageStore.IPageContext)</method>
+ </difference>
+ </ignored>
</configuration>
<executions>
<execution>
diff --git a/wicket-core/src/main/java/org/apache/wicket/Application.java
b/wicket-core/src/main/java/org/apache/wicket/Application.java
index 78fd57f..fa4ce29 100644
--- a/wicket-core/src/main/java/org/apache/wicket/Application.java
+++ b/wicket-core/src/main/java/org/apache/wicket/Application.java
@@ -1567,6 +1567,12 @@ public abstract class Application implements
UnboundListener, IEventSink, IMetad
requestCycle.getListeners().add(new IRequestCycleListener()
{
@Override
+ public void onEndRequest(RequestCycle cycle)
+ {
+ internalGetPageManager().end();
+ }
+
+ @Override
public void onDetach(final RequestCycle
requestCycle)
{
internalGetPageManager().detach();
diff --git
a/wicket-core/src/main/java/org/apache/wicket/page/IPageManager.java
b/wicket-core/src/main/java/org/apache/wicket/page/IPageManager.java
index c675cd9..ef6094a 100644
--- a/wicket-core/src/main/java/org/apache/wicket/page/IPageManager.java
+++ b/wicket-core/src/main/java/org/apache/wicket/page/IPageManager.java
@@ -73,6 +73,12 @@ public interface IPageManager
void clear();
/**
+ * End the request.
+ */
+ default void end() {
endRequest() ?
+ }
+
+ /**
* Detach at end of request.
*/
void detach();
diff --git
a/wicket-core/src/main/java/org/apache/wicket/page/PageManager.java
b/wicket-core/src/main/java/org/apache/wicket/page/PageManager.java
index 642b3c1..02bf13c 100644
--- a/wicket-core/src/main/java/org/apache/wicket/page/PageManager.java
+++ b/wicket-core/src/main/java/org/apache/wicket/page/PageManager.java
@@ -80,6 +80,12 @@ public class PageManager implements IPageManager
}
@Override
+ public void end()
+ {
+ store.end(createPageContext());
+ }
+
+ @Override
public void detach()
{
store.detach(createPageContext());
diff --git
a/wicket-core/src/main/java/org/apache/wicket/pageStore/DelegatingPageStore.java
b/wicket-core/src/main/java/org/apache/wicket/pageStore/DelegatingPageStore.java
index 5ec3a79..3402b2c 100644
---
a/wicket-core/src/main/java/org/apache/wicket/pageStore/DelegatingPageStore.java
+++
b/wicket-core/src/main/java/org/apache/wicket/pageStore/DelegatingPageStore.java
@@ -76,6 +76,12 @@ public abstract class DelegatingPageStore implements
IPageStore
}
@Override
+ public void end(IPageContext context)
+ {
+ delegate.end(context);
+ }
+
+ @Override
public void detach(IPageContext context)
{
delegate.detach(context);
diff --git
a/wicket-core/src/main/java/org/apache/wicket/pageStore/IPageStore.java
b/wicket-core/src/main/java/org/apache/wicket/pageStore/IPageStore.java
index 3872c8a..19f4079 100644
--- a/wicket-core/src/main/java/org/apache/wicket/pageStore/IPageStore.java
+++ b/wicket-core/src/main/java/org/apache/wicket/pageStore/IPageStore.java
@@ -94,6 +94,15 @@ public interface IPageStore
IManageablePage getPage(IPageContext context, int id);
/**
+ * End the current context.
+ *
+ * @param context
+ */
+ default void end(IPageContext context)
again endRequest(IPageContext) ?
+ {
+ }
+
+ /**
* Detach from the current context.
*
* @param context
diff --git
a/wicket-core/src/main/java/org/apache/wicket/pageStore/RequestPageStore.java
b/wicket-core/src/main/java/org/apache/wicket/pageStore/RequestPageStore.java
index 54dc9da..d5c4d78 100644
---
a/wicket-core/src/main/java/org/apache/wicket/pageStore/RequestPageStore.java
+++
b/wicket-core/src/main/java/org/apache/wicket/pageStore/RequestPageStore.java
@@ -59,11 +59,6 @@ public class RequestPageStore extends
DelegatingPageStore
@Override
public void addPage(IPageContext context, IManageablePage page)
{
- // make sure an HTTP session is bound before committing
the response
- if (isPageStateless(page) == false)
- {
- context.getSessionId(true);
- }
getRequestData(context).add(page);
}
@@ -92,6 +87,20 @@ public class RequestPageStore extends
DelegatingPageStore
}
@Override
+ public void end(IPageContext context)
+ {
+ RequestData requestData = getRequestData(context);
+ for (IManageablePage page : requestData.pages())
+ {
+ if (isPageStateless(page) == false)
+ {
+ // last opportunity to create a session
+ context.getSessionId(true);
break ?
+ }
+ }
+ }
+
+ @Override
public void detach(IPageContext context)
{
RequestData requestData = getRequestData(context);
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 b9f9841..d913a92 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
@@ -261,6 +261,16 @@ public class RequestCycle implements IRequestCycle,
IEventSink, IMetadataContext
}
finally
{
+ try
+ {
+ onEndRequest();
+ listeners.onEndRequest(this);
+ }
+ catch (RuntimeException e)
+ {
+ log.error("Exception occurred during
onEndRequest", e);
+ }
+
set(null);
}
@@ -648,16 +658,6 @@ public class RequestCycle implements IRequestCycle,
IEventSink, IMetadataContext
{
try
{
- onEndRequest();
- listeners.onEndRequest(this);
- }
- catch (RuntimeException e)
- {
- log.error("Exception occurred during
onEndRequest", e);
- }
-
- try
- {
requestHandlerExecutor.detach();
}
catch (RuntimeException exception)