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; }
