On 10/04/2014 12:53, Martin Grigorov wrote:
On Thu, Apr 10, 2014 at 1:44 PM, Ernesto Reinaldo Barreiro <
[email protected]> wrote:
Hi,
On Thu, Apr 10, 2014 at 12:36 PM, Tobias Gierke <
[email protected]> wrote:
Hi,
Hi,
On Thu, Apr 10, 2014 at 1:13 PM, Tobias Gierke <
[email protected]
wrote:
Hi,
What do you exactly mean by the rendering of the page after download
completed? You repaint a part of the screen via AJAX? And this is the
one
giving problem with images?
Good point. I just investigated the AJAX response returned by the
server
when clicking the 'Start download' button on the modal dialog and I
noticed
that along with the JavaScript snippet that does the "setTimeout(...)"
there are also a lot of AJAX component updates that are obviously
generated
by components with overridden onEvent() methods. I didn't write the
code
so
I wasn't aware of this :/
I suspect that the issue I'm seeing is caused by the Wicket AJAX
library
being interrupted by the "setTimeout()" call while processing the
component
updates... proving this will unfortunately take some time since the
page
has a lot of different components that all override onEvent() ...
JavaScript is single-threaded. There is no way to interrupt it.
By using setTimeout/setInterval functions you just add tasks to the
queue
that this single thread processes.
I stand corrected ;) But how come - given that setTimeout() just adds a
task to some "queue" - the actual magnitude of the timeout has an effect
?
My queues are usually processed first-to-last ;)
Probably the time out just influence the download of images: e.g. maybe by
making
window.location.href='" + url + "'\", 100);
You are telling the browser "stop loading images, we are processing anew
document"
There is still something unclear here - window.location.href is contributed
via target.appendJavaScript().
This means it is put into <evaluate> XML element in the Ajax response and
should be processed (sequentially!) later than the resource downloads by
Wicket.FunctionExecuter. I.e. the resources should fire their "loaded"
events before FunctionExecuter to move to the next task
Page locking maybe? Does the download lock the page for the duration of
the download?
ajax get
ajax response
dom modified
browser starts downloading images in background, one (or a few) at a time
download of file starts (page is locked on server)
while file download is still busy, browser attempts to download other
images. This may require page lock on server, which will make this
request hang until file download is complete.
Maybe, instead of using AJAXDownload, make like:
new AjaxLink("link"){
@Override
public void onClick(AjaxRequestTarget target){
// do whatever
target.add(...);
Application.get().getResourceReferenceRegistry().registerResourceReference(MyDownloadResourceReference.INSTANCE);
target.appendJavaScript("setTimeout(\"window.location.href='" +
urlFor(MyDownloadResourceReference.INSTANCE, null) + "'\", 100);");
}
};
public class MyDownloadResourceReference
extends ResourceReference
{
public static final MyDownloadResourceReference INSTACE = new
MyDownloadResourceReference();
public MyDownloadResourceReference()
{
super(MyApp.class, "download-woteva");
}
@Override
public IResource getResource()
{
// return resource
}
}
You will need to have some sort of way of passing information from the
page to the IResource about exactly what should be downloaded. You can
do this with by storing temp info in the session (not so great), or by
passing PageParameters in the urlFor() instead of null, and parsing them
in the IResource.
HTH,
Jesse
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]