simplified with meta refresh to the link

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

Branch: refs/heads/master
Commit: b4aec3a494d23a3e88192ff597092f1fa940ca52
Parents: 16311e8
Author: Sven Meier <[email protected]>
Authored: Fri Apr 24 11:27:50 2015 +0200
Committer: Sven Meier <[email protected]>
Committed: Fri Apr 24 11:27:50 2015 +0200

----------------------------------------------------------------------
 .../markup/html/pages/BrowserInfoPage.java      | 71 ++++++++------------
 .../apache/wicket/protocol/http/WebSession.java | 23 +------
 2 files changed, 31 insertions(+), 63 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/b4aec3a4/wicket-core/src/main/java/org/apache/wicket/markup/html/pages/BrowserInfoPage.java
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/main/java/org/apache/wicket/markup/html/pages/BrowserInfoPage.java
 
b/wicket-core/src/main/java/org/apache/wicket/markup/html/pages/BrowserInfoPage.java
index 21ad364..c089f89 100644
--- 
a/wicket-core/src/main/java/org/apache/wicket/markup/html/pages/BrowserInfoPage.java
+++ 
b/wicket-core/src/main/java/org/apache/wicket/markup/html/pages/BrowserInfoPage.java
@@ -20,29 +20,26 @@ import org.apache.wicket.AttributeModifier;
 import org.apache.wicket.markup.head.IHeaderResponse;
 import org.apache.wicket.markup.head.OnLoadHeaderItem;
 import org.apache.wicket.markup.html.WebComponent;
-import org.apache.wicket.markup.html.WebMarkupContainer;
 import org.apache.wicket.markup.html.WebPage;
+import org.apache.wicket.markup.html.link.Link;
 import org.apache.wicket.model.AbstractReadOnlyModel;
 import org.apache.wicket.model.IModel;
-import org.apache.wicket.model.LoadableDetachableModel;
 import org.apache.wicket.protocol.http.ClientProperties;
 import org.apache.wicket.protocol.http.WebSession;
-import org.apache.wicket.protocol.http.request.WebClientInfo;
-import org.apache.wicket.request.cycle.RequestCycle;
 
 /**
- * <p>
  * This page uses a form post right after the page has loaded in the browser, 
using JavaScript or
  * alternative means to detect and pass on settings to the embedded form. The 
form submit method
  * updates this session's {@link org.apache.wicket.core.request.ClientInfo} 
object and then redirects to
  * the original location as was passed in as a URL argument in the constructor.
- * </p>
+ * <p>
+ * If JavaScript is not enabled in the browser, a "refresh" meta-header will 
initiate a get on this page to
+ * continue with the original destination. As a fallback the user can click a 
link to do the same. 
  * <p>
  * This page is being used by the default implementation of {@link 
org.apache.wicket.Session#getClientInfo()},
  * which in turn uses
  * {@link 
org.apache.wicket.settings.RequestCycleSettings#getGatherExtendedBrowserInfo() 
a setting} to
  * determine whether this page should be redirected to (it does when it is 
true).
- * </p>
  * 
  * @author Eelco Hillenius
  */
@@ -53,28 +50,11 @@ public class BrowserInfoPage extends WebPage
        private BrowserInfoForm browserInfoForm;
 
        /**
-        * Bookmarkable constructor. This is not for normal framework client 
use. It will be called
-        * whenever JavaScript is not supported, and the browser info page's 
meta refresh fires to this
-        * page. Prior to this, the other constructor should already have been 
called.
+        * Bookmarkable constructor.
         */
        public BrowserInfoPage()
        {
                initComps();
-               RequestCycle requestCycle = getRequestCycle();
-               WebSession session = (WebSession)getSession();
-               WebClientInfo clientInfo = session.getClientInfo();
-               if (clientInfo == null)
-               {
-                       clientInfo = new WebClientInfo(requestCycle);
-                       getSession().setClientInfo(clientInfo);
-               }
-               else
-               {
-                       ClientProperties properties = 
clientInfo.getProperties();
-                       properties.setNavigatorJavaEnabled(false);
-               }
-
-               continueToOriginalDestination();
        }
 
        @Override
@@ -97,20 +77,10 @@ public class BrowserInfoPage extends WebPage
         */
        private void initComps()
        {
-               WebComponent meta = new WebComponent("meta");
-
-               final IModel<String> urlModel = new 
LoadableDetachableModel<String>()
-               {
-                       private static final long serialVersionUID = 1L;
-
-                       @Override
-                       protected String load()
-                       {
-                               CharSequence url = 
urlFor(BrowserInfoPage.class, null);
-                               return url.toString();
-                       }
-               };
+               final ContinueLink link = new ContinueLink("link");
+               add(link);
 
+               WebComponent meta = new WebComponent("meta");
                meta.add(AttributeModifier.replace("content", new 
AbstractReadOnlyModel<String>()
                {
                        private static final long serialVersionUID = 1L;
@@ -118,14 +88,10 @@ public class BrowserInfoPage extends WebPage
                        @Override
                        public String getObject()
                        {
-                               return "0; url=" + urlModel.getObject();
+                               return "0; url=" + link.getURL();
                        }
-
                }));
                add(meta);
-               WebMarkupContainer link = new WebMarkupContainer("link");
-               link.add(AttributeModifier.replace("href", urlModel));
-               add(link);
 
                IModel<ClientProperties> properties = new 
AbstractReadOnlyModel<ClientProperties>()
                {
@@ -148,4 +114,23 @@ public class BrowserInfoPage extends WebPage
                };
                add(browserInfoForm);
        }
+       
+       private class ContinueLink extends Link<Void> {
+               public ContinueLink(String id)
+               {
+                       super(id);
+               }
+
+               @Override
+               public CharSequence getURL()
+               {
+                       return super.getURL();
+               }
+               
+               @Override
+               public void onClick()
+               {
+                       continueToOriginalDestination();
+               }
+       };
 }

http://git-wip-us.apache.org/repos/asf/wicket/blob/b4aec3a4/wicket-core/src/main/java/org/apache/wicket/protocol/http/WebSession.java
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/main/java/org/apache/wicket/protocol/http/WebSession.java 
b/wicket-core/src/main/java/org/apache/wicket/protocol/http/WebSession.java
index 590c31e..ef70e0a 100644
--- a/wicket-core/src/main/java/org/apache/wicket/protocol/http/WebSession.java
+++ b/wicket-core/src/main/java/org/apache/wicket/protocol/http/WebSession.java
@@ -16,7 +16,6 @@
  */
 package org.apache.wicket.protocol.http;
 
-import org.apache.wicket.MetaDataKey;
 import org.apache.wicket.RestartResponseAtInterceptPageException;
 import org.apache.wicket.Session;
 import org.apache.wicket.markup.html.WebPage;
@@ -39,11 +38,6 @@ public class WebSession extends Session
                return (WebSession)Session.get();
        }
 
-       private static final MetaDataKey<Boolean> BROWSER_WAS_POLLED_KEY = new 
MetaDataKey<Boolean>()
-       {
-               private static final long serialVersionUID = 1L;
-       };
-
        /**
         * Constructor. Note that {@link RequestCycle} is not available until 
this constructor returns.
         * 
@@ -91,24 +85,13 @@ public class WebSession extends Session
                if (clientInfo == null)
                {
                        RequestCycle requestCycle = RequestCycle.get();
+                       clientInfo = new WebClientInfo(requestCycle);
 
                        if 
(getApplication().getRequestCycleSettings().getGatherExtendedBrowserInfo())
                        {
-                               if (getMetaData(BROWSER_WAS_POLLED_KEY) == null)
-                               {
-                                       // we haven't done the redirect yet; 
record that we will be
-                                       // doing that now and redirect
-                                       setMetaData(BROWSER_WAS_POLLED_KEY, 
Boolean.TRUE);
-
-                                       WebPage browserInfoPage = 
newBrowserInfoPage();
-                                       throw new 
RestartResponseAtInterceptPageException(browserInfoPage);
-                               }
-                               // if we get here, the redirect already has 
been done; clear
-                               // the meta data entry; we don't need it any 
longer is the client
-                               // info object will be cached too
-                               setMetaData(BROWSER_WAS_POLLED_KEY, null);
+                               WebPage browserInfoPage = newBrowserInfoPage();
+                               throw new 
RestartResponseAtInterceptPageException(browserInfoPage);
                        }
-                       clientInfo = new WebClientInfo(requestCycle);
                }
                return (WebClientInfo)clientInfo;
        }

Reply via email to