This is an automated email from the ASF dual-hosted git repository.
solomax pushed a commit to branch wicket-8.x
in repository https://gitbox.apache.org/repos/asf/wicket.git
The following commit(s) were added to refs/heads/wicket-8.x by this push:
new 638c84a [WICKET-6648] initiate and onBeforeDownload signatures are
changed (#351)
638c84a is described below
commit 638c84ac6ef9c9b883e8de17baeee0a806f38e51
Author: Maxim Solodovnik <[email protected]>
AuthorDate: Tue Apr 9 19:34:00 2019 +0700
[WICKET-6648] initiate and onBeforeDownload signatures are changed (#351)
* [WICKET-6648] initiate and onBeforeDownload signatures are changed
* Cookie clear is moved to JS, example is added
---
.../examples/ajax/builtin/AjaxDownloadPage.java | 122 +++++++++++++--------
.../websocket/WebSocketBehaviorDemoPage.html | 5 +-
.../websocket/WebSocketBehaviorDemoPage.java | 71 +++++++++++-
.../extensions/ajax/AjaxDownloadBehavior.java | 65 +++++++----
.../wicket/extensions/ajax/wicket-ajaxdownload.js | 3 +-
5 files changed, 190 insertions(+), 76 deletions(-)
diff --git
a/wicket-examples/src/main/java/org/apache/wicket/examples/ajax/builtin/AjaxDownloadPage.java
b/wicket-examples/src/main/java/org/apache/wicket/examples/ajax/builtin/AjaxDownloadPage.java
index 70a682d..fdd43fb 100644
---
a/wicket-examples/src/main/java/org/apache/wicket/examples/ajax/builtin/AjaxDownloadPage.java
+++
b/wicket-examples/src/main/java/org/apache/wicket/examples/ajax/builtin/AjaxDownloadPage.java
@@ -20,6 +20,7 @@ import java.util.concurrent.TimeUnit;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.markup.html.AjaxLink;
+import org.apache.wicket.core.request.handler.IPartialPageRequestHandler;
import org.apache.wicket.extensions.ajax.AjaxDownloadBehavior;
import org.apache.wicket.extensions.ajax.AjaxDownloadBehavior.Location;
import org.apache.wicket.markup.html.WebMarkupContainer;
@@ -34,11 +35,12 @@ import org.apache.wicket.util.time.Duration;
/**
* Ajax download.
- *
+ *
* @author svenmeier
*/
public class AjaxDownloadPage extends BasePage
{
+ private static final long serialVersionUID = 1L;
private WebMarkupContainer downloadingContainer;
/**
@@ -50,9 +52,9 @@ public class AjaxDownloadPage extends BasePage
downloadingContainer.setOutputMarkupPlaceholderTag(true);
downloadingContainer.setVisible(false);
add(downloadingContainer);
-
+
initDownload();
-
+
initDownloadInIframe();
initDownloadInNewWindow();
@@ -75,14 +77,15 @@ public class AjaxDownloadPage extends BasePage
{
IResource resource = new ExampleResource("downloaded via ajax")
.setContentDisposition(ContentDisposition.ATTACHMENT);
-
+
final AjaxDownloadBehavior download = new
AjaxDownloadBehavior(resource) {
-
+ private static final long serialVersionUID = 1L;
+
@Override
- protected void onBeforeDownload(AjaxRequestTarget
target)
+ protected void
onBeforeDownload(IPartialPageRequestHandler handler)
{
downloadingContainer.setVisible(true);
- target.add(downloadingContainer);
+ handler.add(downloadingContainer);
}
@Override
@@ -91,20 +94,22 @@ public class AjaxDownloadPage extends BasePage
downloadingContainer.setVisible(false);
target.add(downloadingContainer);
}
-
+
@Override
protected void onDownloadFailed(AjaxRequestTarget
target)
{
downloadingContainer.setVisible(false);
target.add(downloadingContainer);
-
+
target.appendJavaScript("alert('Download
failed');");
}
};
add(download);
-
+
add(new AjaxLink<Void>("download")
{
+ private static final long serialVersionUID = 1L;
+
@Override
public void onClick(AjaxRequestTarget target)
{
@@ -117,14 +122,16 @@ public class AjaxDownloadPage extends BasePage
{
IResource resource = new ExampleResource("downloaded via ajax
in iframe")
.setContentDisposition(ContentDisposition.ATTACHMENT);
-
- final AjaxDownloadBehavior download = new
AjaxDownloadBehavior(resource) {
-
+
+ final AjaxDownloadBehavior download = new
AjaxDownloadBehavior(resource)
+ {
+ private static final long serialVersionUID = 1L;
+
@Override
- protected void onBeforeDownload(AjaxRequestTarget
target)
+ protected void
onBeforeDownload(IPartialPageRequestHandler handler)
{
downloadingContainer.setVisible(true);
- target.add(downloadingContainer);
+ handler.add(downloadingContainer);
}
@Override
@@ -133,21 +140,23 @@ public class AjaxDownloadPage extends BasePage
downloadingContainer.setVisible(false);
target.add(downloadingContainer);
}
-
+
@Override
protected void onDownloadFailed(AjaxRequestTarget
target)
{
downloadingContainer.setVisible(false);
target.add(downloadingContainer);
-
+
target.appendJavaScript("alert('Download
failed');");
}
};
download.setLocation(Location.IFrame);
add(download);
-
+
add(new AjaxLink<Void>("downloadIframe")
{
+ private static final long serialVersionUID = 1L;
+
@Override
public void onClick(AjaxRequestTarget target)
{
@@ -155,24 +164,29 @@ public class AjaxDownloadPage extends BasePage
}
});
}
-
+
private void initDownloadReference()
{
- ResourceReference reference = new
ResourceReference("referenceToResource") {
+ ResourceReference reference = new
ResourceReference("referenceToResource")
+ {
+ private static final long serialVersionUID = 1L;
+
@Override
public IResource getResource()
{
return new StaticResource();
}
};
-
- final AjaxDownloadBehavior download = new
AjaxDownloadBehavior(reference) {
-
+
+ final AjaxDownloadBehavior download = new
AjaxDownloadBehavior(reference)
+ {
+ private static final long serialVersionUID = 1L;
+
@Override
- protected void onBeforeDownload(AjaxRequestTarget
target)
+ protected void
onBeforeDownload(IPartialPageRequestHandler handler)
{
downloadingContainer.setVisible(true);
- target.add(downloadingContainer);
+ handler.add(downloadingContainer);
}
@Override
@@ -181,20 +195,22 @@ public class AjaxDownloadPage extends BasePage
downloadingContainer.setVisible(false);
target.add(downloadingContainer);
}
-
+
@Override
protected void onDownloadFailed(AjaxRequestTarget
target)
{
downloadingContainer.setVisible(false);
target.add(downloadingContainer);
-
+
target.appendJavaScript("alert('Download
failed');");
}
};
add(download);
-
+
add(new AjaxLink<Void>("downloadReference")
{
+ private static final long serialVersionUID = 1L;
+
@Override
public void onClick(AjaxRequestTarget target)
{
@@ -208,13 +224,15 @@ public class AjaxDownloadPage extends BasePage
IResource resource = new ExampleResource("downloaded via ajax
in a new browser window")
.setContentDisposition(ContentDisposition.INLINE);
- final AjaxDownloadBehavior download = new
AjaxDownloadBehavior(resource) {
+ final AjaxDownloadBehavior download = new
AjaxDownloadBehavior(resource)
+ {
+ private static final long serialVersionUID = 1L;
@Override
- protected void onBeforeDownload(AjaxRequestTarget
target)
+ protected void
onBeforeDownload(IPartialPageRequestHandler handler)
{
downloadingContainer.setVisible(true);
- target.add(downloadingContainer);
+ handler.add(downloadingContainer);
}
@Override
@@ -229,7 +247,7 @@ public class AjaxDownloadPage extends BasePage
{
downloadingContainer.setVisible(false);
target.add(downloadingContainer);
-
+
target.appendJavaScript("alert('Download
failed');");
}
@@ -245,6 +263,8 @@ public class AjaxDownloadPage extends BasePage
add(new AjaxLink<Void>("downloadInNewWindow")
{
+ private static final long serialVersionUID = 1L;
+
@Override
public void onClick(AjaxRequestTarget target)
{
@@ -258,13 +278,15 @@ public class AjaxDownloadPage extends BasePage
IResource resource = new ExampleResource("downloaded via ajax
in same browser window")
.setContentDisposition(ContentDisposition.ATTACHMENT);
- final AjaxDownloadBehavior download = new
AjaxDownloadBehavior(resource) {
+ final AjaxDownloadBehavior download = new
AjaxDownloadBehavior(resource)
+ {
+ private static final long serialVersionUID = 1L;
@Override
- protected void onBeforeDownload(AjaxRequestTarget
target)
+ protected void
onBeforeDownload(IPartialPageRequestHandler handler)
{
downloadingContainer.setVisible(true);
- target.add(downloadingContainer);
+ handler.add(downloadingContainer);
}
@Override
@@ -279,7 +301,7 @@ public class AjaxDownloadPage extends BasePage
{
downloadingContainer.setVisible(false);
target.add(downloadingContainer);
-
+
target.appendJavaScript("alert('Download
failed');");
}
@@ -295,6 +317,8 @@ public class AjaxDownloadPage extends BasePage
add(new AjaxLink<Void>("downloadInSameWindow")
{
+ private static final long serialVersionUID = 1L;
+
@Override
public void onClick(AjaxRequestTarget target)
{
@@ -303,22 +327,24 @@ public class AjaxDownloadPage extends BasePage
});
}
- public static class StaticResource extends ResourceStreamResource {
+ public static class StaticResource extends ResourceStreamResource
+ {
+ private static final long serialVersionUID = 1L;
StaticResource() {
setFileName("File-from-ResourceReference");
setContentDisposition(ContentDisposition.ATTACHMENT);
setCacheDuration(Duration.NONE);
}
-
+
@Override
public void respond(Attributes attributes)
{
AjaxDownloadBehavior.markCompleted(attributes);
-
+
super.respond(attributes);
}
-
+
@Override
protected IResourceStream getResourceStream(Attributes
attributes)
{
@@ -330,15 +356,17 @@ public class AjaxDownloadPage extends BasePage
catch (InterruptedException e)
{
}
-
+
return new StringResourceStream("downloaded via ajax
with resource reference");
}
}
-
- private class ExampleResource extends ResourceStreamResource {
-
+
+ private class ExampleResource extends ResourceStreamResource
+ {
+ private static final long serialVersionUID = 1L;
+
private String content;
-
+
private int count = 0;
public ExampleResource(String content)
@@ -348,7 +376,7 @@ public class AjaxDownloadPage extends BasePage
setFileName("File-from-IResource.txt");
setCacheDuration(Duration.NONE);
}
-
+
@Override
protected IResourceStream getResourceStream(Attributes
attributes) {
// simulate delay
@@ -359,7 +387,7 @@ public class AjaxDownloadPage extends BasePage
catch (InterruptedException e)
{
}
-
+
count++;
if (count == 3) {
count = 0;
diff --git
a/wicket-examples/src/main/java/org/apache/wicket/examples/websocket/WebSocketBehaviorDemoPage.html
b/wicket-examples/src/main/java/org/apache/wicket/examples/websocket/WebSocketBehaviorDemoPage.html
index f94fa4b..b9b0e92 100644
---
a/wicket-examples/src/main/java/org/apache/wicket/examples/websocket/WebSocketBehaviorDemoPage.html
+++
b/wicket-examples/src/main/java/org/apache/wicket/examples/websocket/WebSocketBehaviorDemoPage.html
@@ -23,8 +23,9 @@
</head>
<body>
<wicket:extend>
-
- <div wicket:id="chartPanel"></div>
+ <div wicket:id="chartPanel"></div>
+ <button
onclick="Wicket.WebSocket.send('start');">Initiate download with Web Socket
message</button>
+ <div wicket:id="downloading"
class="download-veil"><span>Preparing download ...</span></div>
</wicket:extend>
</body>
</html>
diff --git
a/wicket-examples/src/main/java/org/apache/wicket/examples/websocket/WebSocketBehaviorDemoPage.java
b/wicket-examples/src/main/java/org/apache/wicket/examples/websocket/WebSocketBehaviorDemoPage.java
index cf3b321..d27bf29 100644
---
a/wicket-examples/src/main/java/org/apache/wicket/examples/websocket/WebSocketBehaviorDemoPage.java
+++
b/wicket-examples/src/main/java/org/apache/wicket/examples/websocket/WebSocketBehaviorDemoPage.java
@@ -18,23 +18,82 @@ package org.apache.wicket.examples.websocket;
import java.util.concurrent.ScheduledExecutorService;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.core.request.handler.IPartialPageRequestHandler;
import org.apache.wicket.examples.WicketExamplePage;
import org.apache.wicket.examples.websocket.charts.ChartUpdater;
import org.apache.wicket.examples.websocket.charts.WebSocketChart;
+import org.apache.wicket.extensions.ajax.AjaxDownloadBehavior;
+import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.protocol.https.RequireHttps;
import org.apache.wicket.protocol.ws.api.WebSocketBehavior;
import org.apache.wicket.protocol.ws.api.WebSocketRequestHandler;
import org.apache.wicket.protocol.ws.api.message.ConnectedMessage;
import org.apache.wicket.protocol.ws.api.message.TextMessage;
+import org.apache.wicket.request.resource.ContentDisposition;
+import org.apache.wicket.request.resource.IResource;
+import org.apache.wicket.request.resource.ResourceStreamResource;
+import org.apache.wicket.util.resource.IResourceStream;
+import org.apache.wicket.util.resource.StringResourceStream;
+import org.apache.wicket.util.time.Duration;
@RequireHttps
public class WebSocketBehaviorDemoPage extends WicketExamplePage
{
- public WebSocketBehaviorDemoPage()
- {
+ private static final long serialVersionUID = 1L;
+ private final WebMarkupContainer downloadingContainer = new
WebMarkupContainer("downloading");
+
+ @Override
+ protected void onInitialize() {
+ super.onInitialize();
+
+ ResourceStreamResource resource = new ResourceStreamResource()
+ {
+ private static final long serialVersionUID = 1L;
+ private int i = 42;
+
+ @Override
+ protected IResourceStream
getResourceStream(IResource.Attributes attributes)
+ {
+ return new StringResourceStream("downloaded via
ajax " + (i++) + " times");
+ }
+ }.setContentDisposition(ContentDisposition.ATTACHMENT)
+ .setFileName("File-from-IResource.txt")
+ .setCacheDuration(Duration.NONE);
+
+ final AjaxDownloadBehavior download = new
AjaxDownloadBehavior(resource)
+ {
+ private static final long serialVersionUID = 1L;
+
+ @Override
+ protected void
onBeforeDownload(IPartialPageRequestHandler handler)
+ {
+ downloadingContainer.setVisible(true);
+ handler.add(downloadingContainer);
+ }
+
+ @Override
+ protected void onDownloadSuccess(AjaxRequestTarget
target)
+ {
+ downloadingContainer.setVisible(false);
+ target.add(downloadingContainer);
+ }
+
+ @Override
+ protected void onDownloadFailed(AjaxRequestTarget
target)
+ {
+ downloadingContainer.setVisible(false);
+ target.add(downloadingContainer);
+
+ target.appendJavaScript("alert('Download
failed');");
+ }
+ };
+ add(download);
WebSocketChart chartPanel = new WebSocketChart("chartPanel");
chartPanel.add(new WebSocketBehavior()
{
+ private static final long serialVersionUID = 1L;
+
@Override
protected void onConnect(ConnectedMessage message)
{
@@ -44,14 +103,20 @@ public class WebSocketBehaviorDemoPage extends
WicketExamplePage
ChartUpdater.start(message, service);
}
});
+
add(downloadingContainer.setOutputMarkupPlaceholderTag(true).setVisible(false));
add(chartPanel);
add(new WebSocketBehavior()
{
+ private static final long serialVersionUID = 1L;
+
@Override
protected void onMessage(WebSocketRequestHandler
handler, TextMessage message)
{
- super.onMessage(handler, message);
+ if ("start".equals(message.getText()))
+ {
+ download.initiate(handler);
+ }
}
});
}
diff --git
a/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/AjaxDownloadBehavior.java
b/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/AjaxDownloadBehavior.java
index 4b2a217..609a2be 100644
---
a/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/AjaxDownloadBehavior.java
+++
b/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/AjaxDownloadBehavior.java
@@ -25,6 +25,7 @@ import org.apache.wicket.ajax.AbstractDefaultAjaxBehavior;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.json.JSONFunction;
import org.apache.wicket.behavior.Behavior;
+import org.apache.wicket.core.request.handler.IPartialPageRequestHandler;
import org.apache.wicket.markup.head.IHeaderResponse;
import org.apache.wicket.markup.head.JavaScriptHeaderItem;
import org.apache.wicket.request.Response;
@@ -45,17 +46,17 @@ import com.github.openjson.JSONObject;
* Download resources via Ajax.
* <p>
* Usage:
- *
+ *
* <pre>
* final AjaxDownload download = new AjaxDownload(resource);
* add(download);
- *
+ *
* add(new AjaxButton("download")
* {
* @Override
- * protected void onSubmit(AjaxRequestTarget target, Form<?> form)
+ * protected void onSubmit(IPartialPageRequestHandler handler, Form<?>
form)
* {
- * download.initiate(target);
+ * download.initiate(handler);
* }
* });
* </pre>
@@ -63,7 +64,7 @@ import com.github.openjson.JSONObject;
* <p>To set the name of the downloaded resource make use of
* {@link
org.apache.wicket.request.resource.ResourceStreamResource#setFileName(String)}
or
* {@link
org.apache.wicket.request.resource.AbstractResource.ResourceResponse#setFileName(String)}</p>
- *
+ *
* @author svenmeier
* @author Martin Grigorov
* @author Maxim Solodovnik
@@ -95,7 +96,7 @@ public class AjaxDownloadBehavior extends
AbstractDefaultAjaxBehavior
* the resource has to be a {@link
ContentDisposition#ATTACHMENT}.
* <p>
* Note: This will trigger JavaScript <em>unload</em> event on
the page!
- * Does not support {@link
AjaxDownloadBehavior#onDownloadFailed(AjaxRequestTarget)} callback,
+ * Does not support {@link
AjaxDownloadBehavior#onDownloadFailed(IPartialPageRequestHandler)} callback,
* i.e. it is not possible to detect when the download has
failed!
*/
SameWindow,
@@ -127,7 +128,7 @@ public class AjaxDownloadBehavior extends
AbstractDefaultAjaxBehavior
/**
* Download of a {@link IResource}.
- *
+ *
* @param resource
* resource to download
*/
@@ -143,8 +144,8 @@ public class AjaxDownloadBehavior extends
AbstractDefaultAjaxBehavior
* <p>
* The {@link IResource} returned by {@link
ResourceReference#getResource()} must call
* {@link #markCompleted(Attributes)} when responding, otherwise the
callback
- * {@link #onDownloadSuccess(AjaxRequestTarget)} will not work.
- *
+ * {@link #onDownloadSuccess(IPartialPageRequestHandler)} will not work.
+ *
* @param reference
* reference to resource to download
*/
@@ -158,8 +159,8 @@ public class AjaxDownloadBehavior extends
AbstractDefaultAjaxBehavior
* <p>
* The {@link IResource} returned by {@link
ResourceReference#getResource()} must call
* {@link #markCompleted(Attributes)} when responding, otherwise the
callback
- * {@link #onDownloadSuccess(AjaxRequestTarget)} will not work.
- *
+ * {@link #onDownloadSuccess(IPartialPageRequestHandler)} will not work.
+ *
* @param reference
* reference to resource to download
* @param resourceParameters
@@ -195,21 +196,25 @@ public class AjaxDownloadBehavior extends
AbstractDefaultAjaxBehavior
}
}
+ @Deprecated
+ public void initiate(AjaxRequestTarget target)
+ {
+ initiate((IPartialPageRequestHandler)target);
+ }
+
/**
* Call this method to initiate the download.
- *
- * @param target
- * the initiating Ajax target
+ *
+ * @param handler
+ * the initiating RequestHandler
*/
- public void initiate(AjaxRequestTarget target)
+ public void initiate(IPartialPageRequestHandler handler)
{
if (getComponent() == null)
{
throw new WicketRuntimeException("not bound to a
component");
}
-
((WebResponse)RequestCycle.get().getResponse()).clearCookie(cookie(getName()));
-
CharSequence url;
if (resourceBehavior == null)
{
@@ -240,15 +245,28 @@ public class AjaxDownloadBehavior extends
AbstractDefaultAjaxBehavior
settings.put("downloadUrl", url);
settings.put("method",
getLocation().name().toLowerCase(Locale.ROOT));
-
target.appendJavaScript(String.format("Wicket.AjaxDownload.initiate(%s);",
settings));
+
handler.appendJavaScript(String.format("Wicket.AjaxDownload.initiate(%s);",
settings));
- onBeforeDownload(target);
+ if (handler instanceof AjaxRequestTarget) {
+ onBeforeDownload((AjaxRequestTarget)handler);
+ }
+ onBeforeDownload(handler);
}
+ /**
+ * Please use {@link #onBeforeDownload(IPartialPageRequestHandler)}
instead
+ *
+ * @param target
+ */
+ @Deprecated
protected void onBeforeDownload(AjaxRequestTarget target)
{
}
+ protected void onBeforeDownload(IPartialPageRequestHandler handler)
+ {
+ }
+
/**
* A callback executed when the download of the resource finished
successfully.
*
@@ -324,6 +342,7 @@ public class AjaxDownloadBehavior extends
AbstractDefaultAjaxBehavior
*/
private class ResourceBehavior extends Behavior implements
IRequestListener
{
+ private static final long serialVersionUID = 1L;
private final IResource resource;
private ResourceBehavior(IResource resource)
@@ -336,7 +355,7 @@ public class AjaxDownloadBehavior extends
AbstractDefaultAjaxBehavior
{
return false;
}
-
+
@Override
public void onRequest()
{
@@ -360,7 +379,7 @@ public class AjaxDownloadBehavior extends
AbstractDefaultAjaxBehavior
* <p>
* Has to be called from {@link IResource#respond(Attributes)} when
downloaded via
* {@link #AjaxDownloadBehavior(IResource)}.
- *
+ *
* @param attributes
* resource attributes
*/
@@ -374,12 +393,12 @@ public class AjaxDownloadBehavior extends
AbstractDefaultAjaxBehavior
private static Cookie cookie(String name)
{
Cookie cookie = new Cookie(name, "complete");
-
+
// has to be on root, otherwise JavaScript will not be able to
access the
// cookie when it is set from a different path - which is the
case when a
// ResourceReference is used
cookie.setPath("/");
-
+
return cookie;
}
}
diff --git
a/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/wicket-ajaxdownload.js
b/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/wicket-ajaxdownload.js
index 6aaa43a..d0e490c 100644
---
a/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/wicket-ajaxdownload.js
+++
b/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/wicket-ajaxdownload.js
@@ -27,7 +27,8 @@
Wicket.AjaxDownload = {
initiate : function(settings) {
-
+ document.cookie = settings.name +
+ '=;path=/;Max-Age=0;expires=Thu, 01 Jan 1970
00:00:01 GMT';
var notifyServer = function(result) {
settings.attributes.ep = settings.attributes.ep
|| {};
settings.attributes.ep.result = result;