Hi Martin,

--- a/wicket-core/src/main/java/org/apache/wicket/Page.java
+++ b/wicket-core/src/main/java/org/apache/wicket/Page.java
@@ -450,6 +450,8 @@ public abstract class Page extends MarkupContainer 
implements IRedirectListener,
if (stateless == null)
                {
+                       internalInitialize();
+
                        if (isStateless() == false)
                        {
                                stateless = Boolean.FALSE;
problem is that calling internaltInitialize() here will trigger initialization of the page from the constructor:

Thread [qtp400269449-16] (Suspended)
    OtherPage.onInitialize() line: 23
    OtherPage(Component).fireInitialize() line: 863
    OtherPage(MarkupContainer).internalInitialize() line: 955
    OtherPage(Page).isPageStateless() line: 453
PageStoreManager(AbstractPageManager).touchPage(IManageablePage) line: 130
PageAccessSynchronizer$2(PageManagerDecorator).touchPage(IManageablePage) line: 59
    PageAccessSynchronizer$2.touchPage(IManageablePage) line: 273
    OtherPage(Page).dirty(boolean) line: 289
    OtherPage(WebPage).dirty(boolean) line: 324
    OtherPage(Page).init() line: 713
    OtherPage(Page).<init>(PageParameters, IModel<?>) line: 178
    OtherPage(Page).<init>() line: 132
    OtherPage(WebPage).<init>() line: 75
    OtherPage.<init>() line: 13

#onInitialize() is assumed to be called *after* the constructor :(.

Regards
Sven


On 03/12/2013 11:46 AM, [email protected] wrote:
Updated Branches:
   refs/heads/master 62fe0a96e -> beee594d9


WICKET-5083 Page#isPageStateless() may return wrong value


Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/beee594d
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/beee594d
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/beee594d

Branch: refs/heads/master
Commit: beee594d98f82d1bf8b59c3c69dbe33eb1743091
Parents: 62fe0a9
Author: Martin Tzvetanov Grigorov <[email protected]>
Authored: Tue Mar 12 11:45:55 2013 +0100
Committer: Martin Tzvetanov Grigorov <[email protected]>
Committed: Tue Mar 12 11:45:55 2013 +0100

----------------------------------------------------------------------
  .../src/main/java/org/apache/wicket/Page.java      |    2 +
  .../html/ajaxLink/AjaxLinkPageExpectedResult.html  |    2 +-
  .../AjaxLinkWithBorderPageExpectedResult.html      |    2 +-
  .../html/ajaxLink/AjaxPage2_ExpectedResult.html    |    2 +-
  .../html/basic/SimplePageExpectedResult_13.html    |    2 +-
  .../border/HideableBorderPage_ExpectedResult.html  |    2 +-
  .../panel/InlinePanelPageExpectedResult_7.html     |    2 +-
  .../panel/InlinePanelPageExpectedResult_8.html     |    2 +-
  .../apache/wicket/page/PageStatelessnessTest.java  |   54 +++++++++++++++
  9 files changed, 63 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/beee594d/wicket-core/src/main/java/org/apache/wicket/Page.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/Page.java 
b/wicket-core/src/main/java/org/apache/wicket/Page.java
index 1467798..86c0472 100644
--- a/wicket-core/src/main/java/org/apache/wicket/Page.java
+++ b/wicket-core/src/main/java/org/apache/wicket/Page.java
@@ -450,6 +450,8 @@ public abstract class Page extends MarkupContainer 
implements IRedirectListener,
if (stateless == null)
                {
+                       internalInitialize();
+
                        if (isStateless() == false)
                        {
                                stateless = Boolean.FALSE;

http://git-wip-us.apache.org/repos/asf/wicket/blob/beee594d/wicket-core/src/test/java/org/apache/wicket/ajax/markup/html/ajaxLink/AjaxLinkPageExpectedResult.html
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/test/java/org/apache/wicket/ajax/markup/html/ajaxLink/AjaxLinkPageExpectedResult.html
 
b/wicket-core/src/test/java/org/apache/wicket/ajax/markup/html/ajaxLink/AjaxLinkPageExpectedResult.html
index 147a640..5cae1da 100644
--- 
a/wicket-core/src/test/java/org/apache/wicket/ajax/markup/html/ajaxLink/AjaxLinkPageExpectedResult.html
+++ 
b/wicket-core/src/test/java/org/apache/wicket/ajax/markup/html/ajaxLink/AjaxLinkPageExpectedResult.html
@@ -10,7 +10,7 @@ Wicket.Ajax.DebugWindow.enabled=true;
  </script>
  <script type="text/javascript" id="wicket-ajax-base-url">
  /*<![CDATA[*/
-Wicket.Ajax.baseUrl="wicket/bookmarkable/org.apache.wicket.ajax.markup.html.ajaxLink.AjaxLinkPage";
+Wicket.Ajax.baseUrl="wicket/bookmarkable/org.apache.wicket.ajax.markup.html.ajaxLink.AjaxLinkPage?0";
  /*]]>*/
  </script>
  <script type="text/javascript" >

http://git-wip-us.apache.org/repos/asf/wicket/blob/beee594d/wicket-core/src/test/java/org/apache/wicket/ajax/markup/html/ajaxLink/AjaxLinkWithBorderPageExpectedResult.html
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/test/java/org/apache/wicket/ajax/markup/html/ajaxLink/AjaxLinkWithBorderPageExpectedResult.html
 
b/wicket-core/src/test/java/org/apache/wicket/ajax/markup/html/ajaxLink/AjaxLinkWithBorderPageExpectedResult.html
index 1316cbc..aed0fb7 100644
--- 
a/wicket-core/src/test/java/org/apache/wicket/ajax/markup/html/ajaxLink/AjaxLinkWithBorderPageExpectedResult.html
+++ 
b/wicket-core/src/test/java/org/apache/wicket/ajax/markup/html/ajaxLink/AjaxLinkWithBorderPageExpectedResult.html
@@ -10,7 +10,7 @@ Wicket.Ajax.DebugWindow.enabled=true;
  </script>
  <script type="text/javascript" id="wicket-ajax-base-url">
  /*<![CDATA[*/
-Wicket.Ajax.baseUrl="wicket/bookmarkable/org.apache.wicket.ajax.markup.html.ajaxLink.AjaxLinkWithBorderPage";
+Wicket.Ajax.baseUrl="wicket/bookmarkable/org.apache.wicket.ajax.markup.html.ajaxLink.AjaxLinkWithBorderPage?0";
  /*]]>*/
  </script>
  <script type="text/javascript" >

http://git-wip-us.apache.org/repos/asf/wicket/blob/beee594d/wicket-core/src/test/java/org/apache/wicket/ajax/markup/html/ajaxLink/AjaxPage2_ExpectedResult.html
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/test/java/org/apache/wicket/ajax/markup/html/ajaxLink/AjaxPage2_ExpectedResult.html
 
b/wicket-core/src/test/java/org/apache/wicket/ajax/markup/html/ajaxLink/AjaxPage2_ExpectedResult.html
index 1d0a909..1a0da1e 100644
--- 
a/wicket-core/src/test/java/org/apache/wicket/ajax/markup/html/ajaxLink/AjaxPage2_ExpectedResult.html
+++ 
b/wicket-core/src/test/java/org/apache/wicket/ajax/markup/html/ajaxLink/AjaxPage2_ExpectedResult.html
@@ -10,7 +10,7 @@ Wicket.Ajax.DebugWindow.enabled=true;
  </script>
  <script type="text/javascript" id="wicket-ajax-base-url">
  /*<![CDATA[*/
-Wicket.Ajax.baseUrl="wicket/bookmarkable/org.apache.wicket.ajax.markup.html.ajaxLink.AjaxPage2";
+Wicket.Ajax.baseUrl="wicket/bookmarkable/org.apache.wicket.ajax.markup.html.ajaxLink.AjaxPage2?0";
  /*]]>*/
  </script>
  <script type="text/javascript" >

http://git-wip-us.apache.org/repos/asf/wicket/blob/beee594d/wicket-core/src/test/java/org/apache/wicket/markup/html/basic/SimplePageExpectedResult_13.html
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/test/java/org/apache/wicket/markup/html/basic/SimplePageExpectedResult_13.html
 
b/wicket-core/src/test/java/org/apache/wicket/markup/html/basic/SimplePageExpectedResult_13.html
index 15cea8a..0639e2e 100644
--- 
a/wicket-core/src/test/java/org/apache/wicket/markup/html/basic/SimplePageExpectedResult_13.html
+++ 
b/wicket-core/src/test/java/org/apache/wicket/markup/html/basic/SimplePageExpectedResult_13.html
@@ -13,7 +13,7 @@ Wicket.Ajax.DebugWindow.enabled=true;
  </script>
  <script type="text/javascript" id="wicket-ajax-base-url">
  /*<![CDATA[*/
-Wicket.Ajax.baseUrl="wicket/bookmarkable/org.apache.wicket.markup.html.basic.SimplePage_13";
+Wicket.Ajax.baseUrl="wicket/bookmarkable/org.apache.wicket.markup.html.basic.SimplePage_13?0";
  /*]]>*/
  </script>
  <link rel="stylesheet" type="text/css" href="../../BasePage.css" />

http://git-wip-us.apache.org/repos/asf/wicket/blob/beee594d/wicket-core/src/test/java/org/apache/wicket/markup/html/border/HideableBorderPage_ExpectedResult.html
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/test/java/org/apache/wicket/markup/html/border/HideableBorderPage_ExpectedResult.html
 
b/wicket-core/src/test/java/org/apache/wicket/markup/html/border/HideableBorderPage_ExpectedResult.html
index b227b6e..4745897 100644
--- 
a/wicket-core/src/test/java/org/apache/wicket/markup/html/border/HideableBorderPage_ExpectedResult.html
+++ 
b/wicket-core/src/test/java/org/apache/wicket/markup/html/border/HideableBorderPage_ExpectedResult.html
@@ -10,7 +10,7 @@ Wicket.Ajax.DebugWindow.enabled=true;
  </script>
  <script type="text/javascript" id="wicket-ajax-base-url">
  /*<![CDATA[*/
-Wicket.Ajax.baseUrl="wicket/bookmarkable/org.apache.wicket.markup.html.border.HideableBorderPage";
+Wicket.Ajax.baseUrl="wicket/bookmarkable/org.apache.wicket.markup.html.border.HideableBorderPage?0";
  /*]]>*/
  </script>
  <script type="text/javascript" >

http://git-wip-us.apache.org/repos/asf/wicket/blob/beee594d/wicket-core/src/test/java/org/apache/wicket/markup/html/panel/InlinePanelPageExpectedResult_7.html
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/test/java/org/apache/wicket/markup/html/panel/InlinePanelPageExpectedResult_7.html
 
b/wicket-core/src/test/java/org/apache/wicket/markup/html/panel/InlinePanelPageExpectedResult_7.html
index 26eb4e7..76e3382 100644
--- 
a/wicket-core/src/test/java/org/apache/wicket/markup/html/panel/InlinePanelPageExpectedResult_7.html
+++ 
b/wicket-core/src/test/java/org/apache/wicket/markup/html/panel/InlinePanelPageExpectedResult_7.html
@@ -10,7 +10,7 @@ Wicket.Ajax.DebugWindow.enabled=true;
  </script>
  <script type="text/javascript" id="wicket-ajax-base-url">
  /*<![CDATA[*/
-Wicket.Ajax.baseUrl="wicket/bookmarkable/org.apache.wicket.markup.html.panel.InlinePanelPage_7";
+Wicket.Ajax.baseUrl="wicket/bookmarkable/org.apache.wicket.markup.html.panel.InlinePanelPage_7?0";
  /*]]>*/
  </script>
  <script type="text/javascript" >

http://git-wip-us.apache.org/repos/asf/wicket/blob/beee594d/wicket-core/src/test/java/org/apache/wicket/markup/html/panel/InlinePanelPageExpectedResult_8.html
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/test/java/org/apache/wicket/markup/html/panel/InlinePanelPageExpectedResult_8.html
 
b/wicket-core/src/test/java/org/apache/wicket/markup/html/panel/InlinePanelPageExpectedResult_8.html
index b6d33ec..6c6238f 100644
--- 
a/wicket-core/src/test/java/org/apache/wicket/markup/html/panel/InlinePanelPageExpectedResult_8.html
+++ 
b/wicket-core/src/test/java/org/apache/wicket/markup/html/panel/InlinePanelPageExpectedResult_8.html
@@ -10,7 +10,7 @@ Wicket.Ajax.DebugWindow.enabled=true;
  </script>
  <script type="text/javascript" id="wicket-ajax-base-url">
  /*<![CDATA[*/
-Wicket.Ajax.baseUrl="wicket/bookmarkable/org.apache.wicket.markup.html.panel.InlinePanelPage_8";
+Wicket.Ajax.baseUrl="wicket/bookmarkable/org.apache.wicket.markup.html.panel.InlinePanelPage_8?0";
  /*]]>*/
  </script>
  <script type="text/javascript" >

http://git-wip-us.apache.org/repos/asf/wicket/blob/beee594d/wicket-core/src/test/java/org/apache/wicket/page/PageStatelessnessTest.java
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/test/java/org/apache/wicket/page/PageStatelessnessTest.java 
b/wicket-core/src/test/java/org/apache/wicket/page/PageStatelessnessTest.java
new file mode 100644
index 0000000..0340a95
--- /dev/null
+++ 
b/wicket-core/src/test/java/org/apache/wicket/page/PageStatelessnessTest.java
@@ -0,0 +1,54 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.wicket.page;
+
+import org.apache.wicket.Page;
+import org.apache.wicket.WicketTestCase;
+import org.apache.wicket.markup.html.WebPage;
+import org.junit.Test;
+
+/**
+ * Tests for Page#isPageStateless
+ */
+public class PageStatelessnessTest extends WicketTestCase
+{
+       /**
+        * Tests that a page is not stateless if it adds stateful components in 
#onInitialize()
+        * https://issues.apache.org/jira/browse/WICKET-5083
+        */
+       @Test
+       public void isPageStatelessWithOnInitialize()
+       {
+               Page page = new TestPage();
+               assertFalse(page.isPageStateless());
+       }
+
+       public static class TestPage extends WebPage
+       {
+
+               public TestPage()
+               {
+               }
+
+               @Override
+               protected void onInitialize() {
+                       super.onInitialize();
+
+                       setStatelessHint(false);
+               }
+       }
+}


Reply via email to