WICKET-6517 pass ajax target to onError
Project: http://git-wip-us.apache.org/repos/asf/wicket/repo Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/3f5c2932 Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/3f5c2932 Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/3f5c2932 Branch: refs/heads/WICKET-6498_deferred_javascript_2 Commit: 3f5c2932c47a6798b3dd361c98bb5756b623eaaf Parents: 237147f Author: Sven Meier <[email protected]> Authored: Thu Jan 18 07:46:51 2018 +0100 Committer: Sven Meier <[email protected]> Committed: Fri Jan 26 23:09:37 2018 +0100 ---------------------------------------------------------------------- .../examples/ajax/builtin/FileUploadPage.java | 9 +++ .../ajax/markup/html/AjaxFileDropBehavior.java | 82 +++++++++++++++----- 2 files changed, 70 insertions(+), 21 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/wicket/blob/3f5c2932/wicket-examples/src/main/java/org/apache/wicket/examples/ajax/builtin/FileUploadPage.java ---------------------------------------------------------------------- diff --git a/wicket-examples/src/main/java/org/apache/wicket/examples/ajax/builtin/FileUploadPage.java b/wicket-examples/src/main/java/org/apache/wicket/examples/ajax/builtin/FileUploadPage.java index 7399301..f7a473c 100644 --- a/wicket-examples/src/main/java/org/apache/wicket/examples/ajax/builtin/FileUploadPage.java +++ b/wicket-examples/src/main/java/org/apache/wicket/examples/ajax/builtin/FileUploadPage.java @@ -18,6 +18,7 @@ package org.apache.wicket.examples.ajax.builtin; import java.util.List; +import org.apache.commons.fileupload.FileUploadException; import org.apache.wicket.Component; import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.ajax.markup.html.form.AjaxButton; @@ -134,6 +135,14 @@ public class FileUploadPage extends BasePage target.add(feedback); } + + @Override + protected void onError(AjaxRequestTarget target, FileUploadException fux) + { + info(fux.getMessage()); + + target.add(feedback); + } }); add(drop); } http://git-wip-us.apache.org/repos/asf/wicket/blob/3f5c2932/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/AjaxFileDropBehavior.java ---------------------------------------------------------------------- diff --git a/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/AjaxFileDropBehavior.java b/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/AjaxFileDropBehavior.java index 9073cd3..b8806d9 100644 --- a/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/AjaxFileDropBehavior.java +++ b/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/AjaxFileDropBehavior.java @@ -22,6 +22,7 @@ import java.util.List; import org.apache.commons.fileupload.FileItem; import org.apache.commons.fileupload.FileUploadException; import org.apache.wicket.Component; +import org.apache.wicket.WicketRuntimeException; import org.apache.wicket.ajax.AjaxEventBehavior; import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.ajax.attributes.AjaxRequestAttributes; @@ -46,34 +47,38 @@ import org.apache.wicket.util.lang.Bytes; public class AjaxFileDropBehavior extends AjaxEventBehavior { - private static final ResourceReference JS = new PackageResourceReference(AjaxFileDropBehavior.class, "datatransfer.js"); + private static final ResourceReference JS = new PackageResourceReference( + AjaxFileDropBehavior.class, "datatransfer.js"); /** - * Maximum size of all uploaded files in bytes in a request. + * Maximum size of all uploaded files in bytes in a request. */ private Bytes maxSize; /** - * Maximum size of file of upload in bytes (if there are more than one) in a request. + * Maximum size of file of upload in bytes (if there are more than one) in a request. */ private Bytes fileMaxSize; private String parameterName = "f"; - + public AjaxFileDropBehavior() { super("drop"); } - + @Override public void renderHead(Component component, IHeaderResponse response) { super.renderHead(component, response); - + response.render(JavaScriptHeaderItem.forReference(JS)); - - // default must be prevented for dragover event, otherwise browser will consume the dataTransfer - response.render(OnDomReadyHeaderItem.forScript(String.format("jQuery('#%s').on('dragover', function(e) { e.preventDefault(); });", component.getMarkupId()))); + + // default must be prevented for dragover event, otherwise browser will consume the + // dataTransfer + response.render(OnDomReadyHeaderItem.forScript( + String.format("jQuery('#%s').on('dragover', function(e) { e.preventDefault(); });", + component.getMarkupId()))); } @Override @@ -86,9 +91,10 @@ public class AjaxFileDropBehavior extends AjaxEventBehavior // default must be prevented, otherwise browser will consume the dataTransfer attributes.setPreventDefault(true); - attributes.getDynamicExtraParameters().add( - String.format("return Wicket.DataTransfer.getFilesAsParamArray(attrs.event.originalEvent, '%s');", parameterName) - ); + attributes.getDynamicExtraParameters() + .add(String.format( + "return Wicket.DataTransfer.getFilesAsParamArray(attrs.event.originalEvent, '%s');", + parameterName)); } @Override @@ -97,14 +103,14 @@ public class AjaxFileDropBehavior extends AjaxEventBehavior try { ServletWebRequest request = (ServletWebRequest)getComponent().getRequest(); - final MultipartServletWebRequest multipartWebRequest = request.newMultipartWebRequest( - getMaxSize(), getComponent().getPage().getId()); + final MultipartServletWebRequest multipartWebRequest = request + .newMultipartWebRequest(getMaxSize(), getComponent().getPage().getId()); multipartWebRequest.setFileMaxSize(getFileMaxSize()); multipartWebRequest.parseFileParts(); // TODO: Can't this be detected from header? getComponent().getRequestCycle().setRequest(multipartWebRequest); - + ArrayList<FileUpload> fileUploads = new ArrayList<>(); // Get the item for the path @@ -117,23 +123,30 @@ public class AjaxFileDropBehavior extends AjaxEventBehavior fileUploads.add(new FileUpload(item)); } } - + onFileUpload(target, fileUploads); } catch (final FileUploadException fux) { - onError(fux); + onError(target, fux); } } public Bytes getMaxSize() { - if (maxSize == null) { - maxSize = getComponent().getApplication().getApplicationSettings().getDefaultMaximumUploadSize(); + if (maxSize == null) + { + maxSize = getComponent().getApplication().getApplicationSettings() + .getDefaultMaximumUploadSize(); } return maxSize; } + /** + * Set the maximum upload size. + * + * @param maxSize maximum size, must not be null + */ public void setMaxSize(Bytes maxSize) { Args.notNull(maxSize, "maxSize"); @@ -145,16 +158,43 @@ public class AjaxFileDropBehavior extends AjaxEventBehavior return fileMaxSize; } + /** + * Set an optional maximum size per file. + * + * @param fileMaxSize maximum size for each uploaded file + */ public void setFileMaxSize(Bytes fileMaxSize) { this.fileMaxSize = fileMaxSize; } - + + /** + * Hook method called after a file was uploaded. + * <p> + * Note: {@link #onError(AjaxRequestTarget, FileUploadException)} is called instead when + * uploading failed + * + * @param target + * the current request handler + * @param files + * uploaded files + */ protected void onFileUpload(AjaxRequestTarget target, List<FileUpload> files) { } - protected void onError(FileUploadException fux) + /** + * Hook method called to handle any error during uploading of the file. + * <p> + * Default implementation re-throws the exception. + * + * @param target + * the current request handler + * @param e + * the error that occurred + */ + protected void onError(AjaxRequestTarget target, FileUploadException fux) { + throw new WicketRuntimeException(fux); } } \ No newline at end of file
