AJAX update and file download in one blowPage edited by Jordi Deu-Pons
Comment:
Upgraded to Wicket 1.5 and added anti-cache URL parameter
Changes (9)
Full ContentFollowing example shows how to use an AJAX request to refresh some components and at the same time make the browser ask back for a file to be downloaded: final AJAXDownload download = new AJAXDownload() { @Override protected IResourceStream getResourceStream() { return createResourceStream(item.getModelObject()); } }; item.add(download); item.add(new AjaxLink<Void>("link") { @Override public void onClick(AjaxRequestTarget target) { // do whatever with the target, e.g. refresh components target.addComponent(...); // finally initiate the download download.initiate(target); } }); We have to add a custom behavior which enables us to initiate the download after the AJAX request has been completed. The overridden hook method provides an IResourceStream (e.g. a FileResourceStream) to serve the actual content. import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.behavior.AbstractAjaxBehavior; import org.apache.wicket.request.handler.resource.ResourceStreamRequestHandler; import org.apache.wicket.util.resource.IResourceStream; /** * @author Sven Meier * @author Ernesto Reinaldo Barreiro ([email protected]) * @author Jordi Deu-Pons ([email protected]) */ public abstract class AJAXDownload extends AbstractAjaxBehavior { private boolean addAntiCache; public AJAXDownload() { this(true); } public AJAXDownload(boolean addAntiCache) { super(); this.addAntiCache = addAntiCache; } /** * Call this method to initiate the download. */ public void initiate(AjaxRequestTarget target) { String url = "" if (addAntiCache) { url = "" + (url.contains("?") ? "&" : "?"); url = "" + "antiCache=" + System.currentTimeMillis(); } target.appendJavaScript("window.location.href=''"); } public void onRequest() { getComponent().getRequestCycle().scheduleRequestHandlerAfterCurrent( new ResourceStreamRequestHandler(getResourceStream(), getFileName())); } /** * Override this method for a file name which will let the browser prompt with a save/open dialog. * @see ResourceStreamRequestTarget#getFileName() */ protected String getFileName() { return null; } /** * Hook method providing the actual resource stream. */ protected abstract IResourceStream getResourceStream(); }
Change Notification Preferences
View Online
|
View Changes
|
Add Comment
|
- [CONF] Apache Wicket > AJAX update and file download in one ... confluence
