You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by so...@apache.org on 2019/04/04 15:26:54 UTC
[wicket] 01/01: [WICKET-6648] initiate and onBeforeDownload
signatures are changed
This is an automated email from the ASF dual-hosted git repository.
solomax pushed a commit to branch WICKET-6648-ajax-download
in repository https://gitbox.apache.org/repos/asf/wicket.git
commit aceed58bb3caead60c1b4a02f6cb197e23838483
Author: Maxim Solodovnik <so...@gmail.com>
AuthorDate: Thu Apr 4 22:26:31 2019 +0700
[WICKET-6648] initiate and onBeforeDownload signatures are changed
---
.../examples/ajax/builtin/AjaxDownloadPage.java | 122 +++++++++++++--------
.../extensions/ajax/AjaxDownloadBehavior.java | 63 +++++++----
2 files changed, 117 insertions(+), 68 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-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..7a7bf1a 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,13 +196,19 @@ 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)
{
@@ -240,15 +247,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 +344,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 +357,7 @@ public class AjaxDownloadBehavior extends AbstractDefaultAjaxBehavior
{
return false;
}
-
+
@Override
public void onRequest()
{
@@ -360,7 +381,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 +395,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;
}
}