Repository: wicket Updated Branches: refs/heads/wicket-7.x 3db582cfe -> 5bfa280b2
WICKET-6056 make it easier to gather more properties Project: http://git-wip-us.apache.org/repos/asf/wicket/repo Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/5bfa280b Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/5bfa280b Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/5bfa280b Branch: refs/heads/wicket-7.x Commit: 5bfa280b2b7fb9dc7861d582a9c6e37d106be879 Parents: 3db582c Author: Sven Meier <svenme...@apache.org> Authored: Thu Nov 24 16:32:22 2016 +0100 Committer: Sven Meier <svenme...@apache.org> Committed: Tue Dec 6 15:09:25 2016 +0100 ---------------------------------------------------------------------- .../wicket/ajax/AjaxClientInfoBehavior.java | 47 +++------------- .../markup/html/pages/BrowserInfoForm.html | 16 ------ .../markup/html/pages/BrowserInfoForm.java | 47 ++-------------- .../markup/html/pages/BrowserInfoPage.java | 44 +++++++++++---- .../markup/html/pages/wicket-browser-info.js | 11 +++- .../wicket/protocol/http/ClientProperties.java | 57 +++++++++++++++----- .../protocol/http/request/WebClientInfo.java | 39 ++++++++++++-- .../ajaxhellobrowser/AjaxHelloBrowser.java | 27 ++++++++-- .../ExtendedClientProperties.java | 49 +++++++++++++++++ 9 files changed, 206 insertions(+), 131 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/wicket/blob/5bfa280b/wicket-core/src/main/java/org/apache/wicket/ajax/AjaxClientInfoBehavior.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/main/java/org/apache/wicket/ajax/AjaxClientInfoBehavior.java b/wicket-core/src/main/java/org/apache/wicket/ajax/AjaxClientInfoBehavior.java index a2fc41a..16ac6e6 100644 --- a/wicket-core/src/main/java/org/apache/wicket/ajax/AjaxClientInfoBehavior.java +++ b/wicket-core/src/main/java/org/apache/wicket/ajax/AjaxClientInfoBehavior.java @@ -22,7 +22,6 @@ import org.apache.wicket.ajax.attributes.AjaxRequestAttributes; import org.apache.wicket.markup.head.IHeaderResponse; import org.apache.wicket.markup.head.JavaScriptHeaderItem; import org.apache.wicket.markup.html.pages.BrowserInfoForm; -import org.apache.wicket.protocol.http.ClientProperties; import org.apache.wicket.protocol.http.request.WebClientInfo; import org.apache.wicket.request.IRequestParameters; import org.apache.wicket.request.cycle.RequestCycle; @@ -62,50 +61,20 @@ public class AjaxClientInfoBehavior extends AbstractAjaxTimerBehavior stop(target); RequestCycle requestCycle = RequestCycle.get(); - IRequestParameters requestParameters = requestCycle.getRequest().getRequestParameters(); - String navigatorAppName = requestParameters.getParameterValue("navigatorAppName").toString("N/A"); - String navigatorAppVersion = requestParameters.getParameterValue("navigatorAppVersion").toString("N/A"); - String navigatorAppCodeName = requestParameters.getParameterValue("navigatorAppCodeName").toString("N/A"); - boolean navigatorCookieEnabled = requestParameters.getParameterValue("navigatorCookieEnabled").toBoolean(false); - Boolean navigatorJavaEnabled = requestParameters.getParameterValue("navigatorJavaEnabled").toBoolean(false); - String navigatorLanguage = requestParameters.getParameterValue("navigatorLanguage").toString("N/A"); - String navigatorPlatform = requestParameters.getParameterValue("navigatorPlatform").toString("N/A"); - String navigatorUserAgent = requestParameters.getParameterValue("navigatorUserAgent").toString("N/A"); - int screenWidth = requestParameters.getParameterValue("screenWidth").toInt(-1); - int screenHeight = requestParameters.getParameterValue("screenHeight").toInt(-1); - int screenColorDepth = requestParameters.getParameterValue("screenColorDepth").toInt(-1); - String utcOffset = requestParameters.getParameterValue("utcOffset").toString("N/A"); - String utcDSTOffset = requestParameters.getParameterValue("utcDSTOffset").toString("N/A"); - int browserWidth = requestParameters.getParameterValue("browserWidth").toInt(-1); - int browserHeight = requestParameters.getParameterValue("browserHeight").toInt(-1); - String hostname = requestParameters.getParameterValue("hostname").toString("N/A"); - WebClientInfo clientInfo = new WebClientInfo(requestCycle); + IRequestParameters requestParameters = requestCycle.getRequest().getRequestParameters(); + WebClientInfo clientInfo = newWebClientInfo(requestCycle); + clientInfo.getProperties().read(requestParameters); Session.get().setClientInfo(clientInfo); - ClientProperties properties = clientInfo.getProperties(); - properties.setJavaScriptEnabled(true); - - properties.setNavigatorAppCodeName(navigatorAppCodeName); - properties.setNavigatorAppName(navigatorAppName); - properties.setNavigatorAppVersion(navigatorAppVersion); - properties.setNavigatorCookieEnabled(navigatorCookieEnabled); - properties.setNavigatorJavaEnabled(navigatorJavaEnabled); - properties.setNavigatorLanguage(navigatorLanguage); - properties.setNavigatorPlatform(navigatorPlatform); - properties.setNavigatorUserAgent(navigatorUserAgent); - properties.setScreenWidth(screenWidth); - properties.setScreenHeight(screenHeight); - properties.setScreenColorDepth(screenColorDepth); - properties.setUtcOffset(utcOffset); - properties.setUtcDSTOffset(utcDSTOffset); - properties.setBrowserWidth(browserWidth); - properties.setBrowserHeight(browserHeight); - properties.setHostname(hostname); - onClientInfo(target, clientInfo); } + protected WebClientInfo newWebClientInfo(RequestCycle requestCycle) + { + return new WebClientInfo(requestCycle); + } + /** * A callback method invoked when the client info is collected. * http://git-wip-us.apache.org/repos/asf/wicket/blob/5bfa280b/wicket-core/src/main/java/org/apache/wicket/markup/html/pages/BrowserInfoForm.html ---------------------------------------------------------------------- diff --git a/wicket-core/src/main/java/org/apache/wicket/markup/html/pages/BrowserInfoForm.html b/wicket-core/src/main/java/org/apache/wicket/markup/html/pages/BrowserInfoForm.html index 5676493..add368f 100644 --- a/wicket-core/src/main/java/org/apache/wicket/markup/html/pages/BrowserInfoForm.html +++ b/wicket-core/src/main/java/org/apache/wicket/markup/html/pages/BrowserInfoForm.html @@ -19,22 +19,6 @@ <html xmlns:wicket="http://wicket.apache.org"> <wicket:panel> <form name="postback" wicket:id="postback" style="position:absolute; left: -10000px;"> - <input type="text" wicket:id="navigatorAppName" value="test" /> - <input type="text" wicket:id="navigatorAppVersion" value="test" /> - <input type="text" wicket:id="navigatorAppCodeName" /> - <input type="text" wicket:id="navigatorCookieEnabled" /> - <input type="text" wicket:id="navigatorJavaEnabled" /> - <input type="text" wicket:id="navigatorLanguage" /> - <input type="text" wicket:id="navigatorPlatform" /> - <input type="text" wicket:id="navigatorUserAgent" /> - <input type="text" wicket:id="screenWidth" /> - <input type="text" wicket:id="screenHeight" /> - <input type="text" wicket:id="screenColorDepth" /> - <input type="text" wicket:id="utcOffset" /> - <input type="text" wicket:id="utcDSTOffset" /> - <input type="text" wicket:id="browserWidth" /> - <input type="text" wicket:id="browserHeight" /> - <input type="text" wicket:id="hostname" /> </form> </wicket:panel> </html> http://git-wip-us.apache.org/repos/asf/wicket/blob/5bfa280b/wicket-core/src/main/java/org/apache/wicket/markup/html/pages/BrowserInfoForm.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/main/java/org/apache/wicket/markup/html/pages/BrowserInfoForm.java b/wicket-core/src/main/java/org/apache/wicket/markup/html/pages/BrowserInfoForm.java index 8164c1b..51ef702 100644 --- a/wicket-core/src/main/java/org/apache/wicket/markup/html/pages/BrowserInfoForm.java +++ b/wicket-core/src/main/java/org/apache/wicket/markup/html/pages/BrowserInfoForm.java @@ -16,14 +16,10 @@ */ package org.apache.wicket.markup.html.pages; -import java.util.Locale; - import org.apache.wicket.markup.head.IHeaderResponse; import org.apache.wicket.markup.head.JavaScriptHeaderItem; import org.apache.wicket.markup.html.form.Form; -import org.apache.wicket.markup.html.form.TextField; import org.apache.wicket.markup.html.panel.GenericPanel; -import org.apache.wicket.model.CompoundPropertyModel; import org.apache.wicket.model.IModel; import org.apache.wicket.protocol.http.ClientProperties; import org.apache.wicket.request.resource.JavaScriptResourceReference; @@ -67,33 +63,18 @@ public class BrowserInfoForm extends GenericPanel<ClientProperties> */ protected Form<ClientProperties> createForm(String componentId, IModel<ClientProperties> properties) { - Form<ClientProperties> form = new Form<ClientProperties>(componentId, - new CompoundPropertyModel<ClientProperties>(properties)) + Form<ClientProperties> form = new Form<ClientProperties>(componentId, properties) { private static final long serialVersionUID = 1L; @Override protected void onSubmit() { + getModelObject().read(getRequest().getPostParameters()); + afterSubmit(); } }; - form.add(new ReadOnlyTextField<String>("navigatorAppName")); - form.add(new ReadOnlyTextField<String>("navigatorAppVersion")); - form.add(new ReadOnlyTextField<String>("navigatorAppCodeName")); - form.add(new ReadOnlyTextField<Boolean>("navigatorCookieEnabled")); - form.add(new ReadOnlyTextField<Boolean>("navigatorJavaEnabled")); - form.add(new ReadOnlyTextField<String>("navigatorLanguage")); - form.add(new ReadOnlyTextField<String>("navigatorPlatform")); - form.add(new ReadOnlyTextField<String>("navigatorUserAgent")); - form.add(new ReadOnlyTextField<String>("screenWidth")); - form.add(new ReadOnlyTextField<String>("screenHeight")); - form.add(new ReadOnlyTextField<String>("screenColorDepth")); - form.add(new ReadOnlyTextField<String>("utcOffset")); - form.add(new ReadOnlyTextField<String>("utcDSTOffset")); - form.add(new ReadOnlyTextField<String>("browserWidth")); - form.add(new ReadOnlyTextField<String>("browserHeight")); - form.add(new ReadOnlyTextField<String>("hostname")); return form; } @@ -116,24 +97,4 @@ public class BrowserInfoForm extends GenericPanel<ClientProperties> { return form.getMarkupId(); } - - private static final class ReadOnlyTextField<T> extends TextField<T> { - - public ReadOnlyTextField(String id) - { - super(id); - } - - @Override - protected String getModelValue() - { - return ""; - } - - @Override - public Locale getLocale() - { - return Locale.ENGLISH; - } - } -} +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/wicket/blob/5bfa280b/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 5856015..2a5f356 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 @@ -22,10 +22,12 @@ import org.apache.wicket.markup.head.OnLoadHeaderItem; 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; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -52,7 +54,7 @@ public class BrowserInfoPage extends WebPage private static final Logger log = LoggerFactory.getLogger(BrowserInfoPage.class); private BrowserInfoForm browserInfoForm; - + /** * Bookmarkable constructor. */ @@ -76,17 +78,30 @@ public class BrowserInfoPage extends WebPage return false; } + protected WebClientInfo newWebClientInfo(RequestCycle requestCycle) + { + return new WebClientInfo(requestCycle); + } + /** * Adds components. */ private void initComps() { - IModel<ClientProperties> properties = new AbstractReadOnlyModel<ClientProperties>() + final IModel<WebClientInfo> info = new LoadableDetachableModel<WebClientInfo>() { + @Override + protected WebClientInfo load() + { + return newWebClientInfo(getRequestCycle()); + } + }; + + IModel<ClientProperties> properties = new LoadableDetachableModel<ClientProperties>() { @Override - public ClientProperties getObject() + protected ClientProperties load() { - return WebSession.get().getClientInfo().getProperties(); + return info.getObject().getProperties(); } }; @@ -100,7 +115,7 @@ public class BrowserInfoPage extends WebPage } }.setVisible(false)); - add(new ContinueLink("link", properties)); + add(new ContinueLink("link", info)); browserInfoForm = new BrowserInfoForm("postback", properties) { @@ -111,6 +126,8 @@ public class BrowserInfoPage extends WebPage { getModelObject().setJavaScriptEnabled(true); + WebSession.get().setClientInfo(info.getObject()); + continueToOriginalDestination(); // switch to home page if no original destination was intercepted @@ -120,11 +137,16 @@ public class BrowserInfoPage extends WebPage add(browserInfoForm); } - private static class ContinueLink extends Link<ClientProperties> { + protected ClientProperties newClientInfo() + { + return WebSession.get().getClientInfo().getProperties(); + } + + private static class ContinueLink extends Link<WebClientInfo> { - public ContinueLink(String id, IModel<ClientProperties> properties) + public ContinueLink(String id, IModel<WebClientInfo> info) { - super(id, properties); + super(id, info); } @Override @@ -138,7 +160,9 @@ public class BrowserInfoPage extends WebPage @Override public void onClick() { - getModelObject().setJavaScriptEnabled(false); + getModelObject().getProperties().setJavaScriptEnabled(false); + + WebSession.get().setClientInfo(getModelObject()); continueToOriginalDestination(); http://git-wip-us.apache.org/repos/asf/wicket/blob/5bfa280b/wicket-core/src/main/java/org/apache/wicket/markup/html/pages/wicket-browser-info.js ---------------------------------------------------------------------- diff --git a/wicket-core/src/main/java/org/apache/wicket/markup/html/pages/wicket-browser-info.js b/wicket-core/src/main/java/org/apache/wicket/markup/html/pages/wicket-browser-info.js index 0d524af..cd0da94 100644 --- a/wicket-core/src/main/java/org/apache/wicket/markup/html/pages/wicket-browser-info.js +++ b/wicket-core/src/main/java/org/apache/wicket/markup/html/pages/wicket-browser-info.js @@ -63,6 +63,11 @@ info.browserWidth = window.innerWidth || document.body.offsetWidth; info.browserHeight = window.innerHeight || document.body.offsetHeight; info.hostname = window.location.hostname; + + if (Wicket.BrowserInfo.collectExtraInfo) { + Wicket.BrowserInfo.collectExtraInfo(info); + } + return info; }, @@ -77,7 +82,11 @@ var info = Wicket.BrowserInfo.collect(); var i; for (i in info) { - postbackForm[i].value = info[i]; + var input = document.createElement('input'); + input.type = 'text'; + input.name = i; + input.value = info[i]; + postbackForm.appendChild(input); } return postbackForm; http://git-wip-us.apache.org/repos/asf/wicket/blob/5bfa280b/wicket-core/src/main/java/org/apache/wicket/protocol/http/ClientProperties.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/main/java/org/apache/wicket/protocol/http/ClientProperties.java b/wicket-core/src/main/java/org/apache/wicket/protocol/http/ClientProperties.java index f8bb40b..e86f444 100644 --- a/wicket-core/src/main/java/org/apache/wicket/protocol/http/ClientProperties.java +++ b/wicket-core/src/main/java/org/apache/wicket/protocol/http/ClientProperties.java @@ -17,12 +17,14 @@ package org.apache.wicket.protocol.http; import java.lang.reflect.Field; +import java.lang.reflect.Modifier; import java.util.Collection; import java.util.TimeZone; import javax.servlet.http.Cookie; import org.apache.wicket.markup.html.pages.BrowserInfoPage; +import org.apache.wicket.request.IRequestParameters; import org.apache.wicket.request.cycle.RequestCycle; import org.apache.wicket.request.http.WebRequest; import org.apache.wicket.util.io.IClusterable; @@ -77,16 +79,15 @@ public class ClientProperties implements IClusterable private int screenColorDepth = -1; private int screenHeight = -1; private int screenWidth = -1; - /** Cached timezone for repeating calls to {@link #getTimeZone()} */ - private TimeZone timeZone; private String utcDSTOffset; - private String utcOffset; - private String hostname; private boolean javaScriptEnabled; + /** Cached timezone for repeating calls to {@link #getTimeZone()} */ + private transient TimeZone timeZone; + /** * @return The browser height at the time it was measured */ @@ -746,15 +747,19 @@ public class ClientProperties implements IClusterable { StringBuilder b = new StringBuilder(); - Field[] fields = ClientProperties.class.getDeclaredFields(); + Class<?> clazz = getClass(); + while (clazz != Object.class) { + Field[] fields = clazz.getDeclaredFields(); - for (Field field : fields) - { - // Ignore these fields - if (field.getName().equals("serialVersionUID") == false && - field.getName().startsWith("class$") == false && - field.getName().startsWith("timeZone") == false) + for (Field field : fields) { + // Ignore these fields + if (Modifier.isStatic(field.getModifiers()) || + Modifier.isTransient(field.getModifiers()) || + field.isSynthetic()) + { + continue; + } field.setAccessible(true); @@ -788,9 +793,35 @@ public class ClientProperties implements IClusterable b.append('\n'); } } - } + clazz = clazz.getSuperclass(); + } return b.toString(); } -} + /** + * Read parameters. + * + * @param parameters + * parameters sent from browser + */ + public void read(IRequestParameters parameters) + { + setNavigatorAppCodeName(parameters.getParameterValue("navigatorAppCodeName").toString("N/A")); + setNavigatorAppName(parameters.getParameterValue("navigatorAppName").toString("N/A")); + setNavigatorAppVersion(parameters.getParameterValue("navigatorAppVersion").toString("N/A")); + setNavigatorCookieEnabled(parameters.getParameterValue("navigatorCookieEnabled").toBoolean(false)); + setNavigatorJavaEnabled(parameters.getParameterValue("navigatorJavaEnabled").toBoolean(false)); + setNavigatorLanguage(parameters.getParameterValue("navigatorLanguage").toString("N/A")); + setNavigatorPlatform(parameters.getParameterValue("navigatorPlatform").toString("N/A")); + setNavigatorUserAgent(parameters.getParameterValue("navigatorUserAgent").toString("N/A")); + setScreenWidth(parameters.getParameterValue("screenWidth").toInt(-1)); + setScreenHeight(parameters.getParameterValue("screenHeight").toInt(-1)); + setScreenColorDepth(parameters.getParameterValue("screenColorDepth").toInt(-1)); + setUtcOffset(parameters.getParameterValue("utcOffset").toString(null)); + setUtcDSTOffset(parameters.getParameterValue("utcDSTOffset").toString(null)); + setBrowserWidth(parameters.getParameterValue("browserWidth").toInt(-1)); + setBrowserHeight(parameters.getParameterValue("browserHeight").toInt(-1)); + setHostname(parameters.getParameterValue("hostname").toString("N/A")); + } +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/wicket/blob/5bfa280b/wicket-core/src/main/java/org/apache/wicket/protocol/http/request/WebClientInfo.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/main/java/org/apache/wicket/protocol/http/request/WebClientInfo.java b/wicket-core/src/main/java/org/apache/wicket/protocol/http/request/WebClientInfo.java index 9fc4700..2b0747c 100644 --- a/wicket-core/src/main/java/org/apache/wicket/protocol/http/request/WebClientInfo.java +++ b/wicket-core/src/main/java/org/apache/wicket/protocol/http/request/WebClientInfo.java @@ -52,7 +52,7 @@ public class WebClientInfo extends ClientInfo private final String userAgent; /** Client properties object. */ - private final ClientProperties properties = new ClientProperties(); + private final ClientProperties properties; /** * Construct. @@ -62,8 +62,19 @@ public class WebClientInfo extends ClientInfo */ public WebClientInfo(RequestCycle requestCycle) { + this(requestCycle, new ClientProperties()); + } + + /** + * Construct. + * + * @param requestCycle + * the request cycle + */ + public WebClientInfo(RequestCycle requestCycle, ClientProperties properties) + { this(requestCycle, ((ServletWebRequest)requestCycle.getRequest()).getContainerRequest() - .getHeader("User-Agent")); + .getHeader("User-Agent"), properties); } /** @@ -76,10 +87,28 @@ public class WebClientInfo extends ClientInfo */ public WebClientInfo(final RequestCycle requestCycle, final String userAgent) { + this(requestCycle, userAgent, new ClientProperties()); + } + + /** + * Construct. + * + * @param requestCycle + * the request cycle + * @param userAgent + * The User-Agent string + * @param properties + * properties of client + */ + public WebClientInfo(final RequestCycle requestCycle, final String userAgent, final ClientProperties properties) + { super(); this.userAgent = userAgent; + + this.properties = properties; properties.setRemoteAddress(getRemoteAddr(requestCycle)); + init(); } @@ -219,8 +248,8 @@ public class WebClientInfo extends ClientInfo if (userAgent.contains("version/")) { - // e.g.: Mozilla/5.0 (Windows; U; Windows NT 6.1; sv-SE) AppleWebKit/533.19.4 -// (KHTML, like Gecko) Version/5.0.3 Safari/533.19.4 + // e.g.: Mozilla/5.0 (Windows; U; Windows NT 6.1; sv-SE) AppleWebKit/533.19 + // (KHTML, like Gecko) Version/5.0.3 Safari/533.19.4 setMajorMinorVersionByPattern("version/(\\d+)\\.(\\d+)"); } } @@ -239,7 +268,7 @@ public class WebClientInfo extends ClientInfo if (properties.isBrowserMozillaFirefox()) { // e.g.: Mozilla/5.0 (X11; U; Linux i686; pl-PL; rv:1.9.0.2) Gecko/20121223 -// Ubuntu/9.25 (jaunty) Firefox/3.8 + // Ubuntu/9.25 (jaunty) Firefox/3.8 setMajorMinorVersionByPattern("firefox/(\\d+)\\.(\\d+)"); } } http://git-wip-us.apache.org/repos/asf/wicket/blob/5bfa280b/wicket-examples/src/main/java/org/apache/wicket/examples/ajaxhellobrowser/AjaxHelloBrowser.java ---------------------------------------------------------------------- diff --git a/wicket-examples/src/main/java/org/apache/wicket/examples/ajaxhellobrowser/AjaxHelloBrowser.java b/wicket-examples/src/main/java/org/apache/wicket/examples/ajaxhellobrowser/AjaxHelloBrowser.java index 43ce570..cca2a28 100644 --- a/wicket-examples/src/main/java/org/apache/wicket/examples/ajaxhellobrowser/AjaxHelloBrowser.java +++ b/wicket-examples/src/main/java/org/apache/wicket/examples/ajaxhellobrowser/AjaxHelloBrowser.java @@ -21,15 +21,19 @@ import java.util.Calendar; import java.util.Locale; import java.util.TimeZone; +import org.apache.wicket.Component; import org.apache.wicket.ajax.AjaxClientInfoBehavior; import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.examples.WicketExamplePage; +import org.apache.wicket.markup.head.IHeaderResponse; +import org.apache.wicket.markup.head.JavaScriptHeaderItem; import org.apache.wicket.markup.html.basic.Label; import org.apache.wicket.markup.html.basic.MultiLineLabel; import org.apache.wicket.model.AbstractReadOnlyModel; import org.apache.wicket.model.IModel; import org.apache.wicket.protocol.http.ClientProperties; import org.apache.wicket.protocol.http.request.WebClientInfo; +import org.apache.wicket.request.cycle.RequestCycle; import org.apache.wicket.settings.RequestCycleSettings; @@ -84,15 +88,30 @@ public class AjaxHelloBrowser extends WicketExamplePage clientTime.setOutputMarkupPlaceholderTag(true); clientTime.setVisible(false); - add(new AjaxClientInfoBehavior() - { + add(new AjaxClientInfoBehavior() { + + @Override + public void renderHead(Component component, IHeaderResponse response) + { + super.renderHead(component, response); + + String script = "Wicket.BrowserInfo.collectExtraInfo = function(info) { info.extendedProperty = 'This property was read extra.'; };"; + + response.render(JavaScriptHeaderItem.forScript(script, "extended-client-info")); + } + @Override - protected void onClientInfo(AjaxRequestTarget target, WebClientInfo info) + protected WebClientInfo newWebClientInfo(RequestCycle requestCycle) { - super.onClientInfo(target, info); + return new WebClientInfo(requestCycle, new ExtendedClientProperties()); + } + @Override + protected void onClientInfo(AjaxRequestTarget target, WebClientInfo webClientInfo) + { clientInfo.setVisible(true); clientTime.setVisible(true); + target.add(clientInfo, clientTime); } }); http://git-wip-us.apache.org/repos/asf/wicket/blob/5bfa280b/wicket-examples/src/main/java/org/apache/wicket/examples/ajaxhellobrowser/ExtendedClientProperties.java ---------------------------------------------------------------------- diff --git a/wicket-examples/src/main/java/org/apache/wicket/examples/ajaxhellobrowser/ExtendedClientProperties.java b/wicket-examples/src/main/java/org/apache/wicket/examples/ajaxhellobrowser/ExtendedClientProperties.java new file mode 100644 index 0000000..1d301f3 --- /dev/null +++ b/wicket-examples/src/main/java/org/apache/wicket/examples/ajaxhellobrowser/ExtendedClientProperties.java @@ -0,0 +1,49 @@ +/* + * 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.examples.ajaxhellobrowser; + +import org.apache.wicket.protocol.http.ClientProperties; +import org.apache.wicket.request.IRequestParameters; + +/** + * Showcase for extended properties of a client. + */ +public class ExtendedClientProperties extends ClientProperties +{ + private String extendedProperty; + + public String getExtendedProperty() + { + return extendedProperty; + } + + public void setExtendedProperty(String extendedProperty) + { + this.extendedProperty = extendedProperty; + } + + /** + * Overridden to read additional properties. + */ + @Override + public void read(IRequestParameters parameters) + { + super.read(parameters); + + setExtendedProperty(parameters.getParameterValue("extendedProperty").toString("N/A")); + } +} \ No newline at end of file