You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by sv...@apache.org on 2018/01/18 06:47:22 UTC

wicket git commit: WICKET-6517 pass ajax target to onError

Repository: wicket
Updated Branches:
  refs/heads/WICKET-6517-multipart-ajax bca916dda -> 08718ab9d


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/08718ab9
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/08718ab9
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/08718ab9

Branch: refs/heads/WICKET-6517-multipart-ajax
Commit: 08718ab9d906c431435e8c3a4926ed4c18032e19
Parents: bca916d
Author: Sven Meier <sv...@apache.org>
Authored: Thu Jan 18 07:46:51 2018 +0100
Committer: Sven Meier <sv...@apache.org>
Committed: Thu Jan 18 07:46:51 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/08718ab9/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/08718ab9/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