[ 
https://issues.apache.org/jira/browse/WICKET-6055?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15071069#comment-15071069
 ] 

ASF GitHub Bot commented on WICKET-6055:
----------------------------------------

Github user dashorst commented on a diff in the pull request:

    https://github.com/apache/wicket/pull/151#discussion_r48417106
  
    --- Diff: 
wicket-examples/src/main/java/org/apache/wicket/examples/ajax/builtin/LazyLoadingPage.java
 ---
    @@ -16,38 +16,100 @@
      */
     package org.apache.wicket.examples.ajax.builtin;
     
    +import java.util.Random;
    +
     import org.apache.wicket.Component;
     import org.apache.wicket.extensions.ajax.markup.html.AjaxLazyLoadPanel;
     import org.apache.wicket.markup.html.basic.Label;
    +import org.apache.wicket.markup.html.link.Link;
    +import org.apache.wicket.markup.html.panel.EmptyPanel;
    +import org.apache.wicket.markup.repeater.RepeatingView;
    +import org.apache.wicket.util.time.Duration;
     
    -/**
    - * @author jcompagner
    - */
    +@SuppressWarnings({ "javadoc", "serial" })
     public class LazyLoadingPage extends BasePage
     {
    -   /**
    -    * Construct.
    -    */
    +   private Random r = new Random();
    +
        public LazyLoadingPage()
        {
    -           add(new AjaxLazyLoadPanel("lazy")
    +           add(new Link<Void>("startNonblocking")
    +           {
    +                   @Override
    +                   public void onClick()
    +                   {
    +                           addNonBlockingPanels();
    +                   }
    +           });
    +           add(new Link<Void>("startBlocking")
                {
    -
                        @Override
    -                   public Component getLazyLoadComponent(String id)
    +                   public void onClick()
                        {
    -                           // sleep for 5 seconds to show the behavior
    -                           try
    +                           addBlockingPanels();
    +                   }
    +           });
    +
    +           add(new EmptyPanel("lazy"));
    +           add(new EmptyPanel("lazy2"));
    +   }
    +
    +   private void addNonBlockingPanels()
    +   {
    +           RepeatingView rv;
    +           addOrReplace(rv = new RepeatingView("lazy"));
    +
    +           for (int i = 0; i < 10; i++)
    +                   rv.add(new AjaxLazyLoadPanel(rv.newChildId())
    +                   {
    +                           private static final long serialVersionUID = 1L;
    +
    +                           private long startTime = 
System.currentTimeMillis();
    +
    +                           private int seconds = r.nextInt(10);
    +
    +                           @Override
    +                           protected boolean isReadyForReplacement()
                                {
    -                                   Thread.sleep(5000);
    +                                   return 
Duration.milliseconds(System.currentTimeMillis() - startTime)
    +                                           .seconds() > seconds;
                                }
    -                           catch (InterruptedException e)
    +
    +                           @Override
    +                           public Component getLazyLoadComponent(String id)
                                {
    -                                   throw new RuntimeException(e);
    +                                   return new Label(id, "Lazy Loaded after 
" + seconds + " seconds");
                                }
    -                           return new Label(id, "Lazy Loaded after 5 
seconds");
    -                   }
    +                   });
    +   }
     
    -           });
    +   private void addBlockingPanels()
    +   {
    +           RepeatingView rv;
    +           addOrReplace(rv = new RepeatingView("lazy2"));
    +
    +           for (int i = 0; i < 5; i++)
    +                   rv.add(new AjaxLazyLoadPanel(rv.newChildId())
    +                   {
    +                           private static final long serialVersionUID = 1L;
    +
    +                           private int seconds = r.nextInt(5);
    +
    +                           @Override
    +                           public Component getLazyLoadComponent(String 
markupId)
    +                           {
    +                                   try
    +                                   {
    +                                           System.out.println("Starting 
sleep");
    --- End diff --
    
    oopsie, this one should've been removed.


> AjaxLazyLoadPanel should provide non-blocking lazy load
> -------------------------------------------------------
>
>                 Key: WICKET-6055
>                 URL: https://issues.apache.org/jira/browse/WICKET-6055
>             Project: Wicket
>          Issue Type: Improvement
>          Components: wicket-extensions
>    Affects Versions: 7.1.0
>            Reporter: Martijn Dashorst
>            Assignee: Martijn Dashorst
>
> When having multiple AjaxLazyLoadPanels on your page, they all block their 
> Wicket request thread until the content is ready to load. This can be 
> problematic when you try to wait for some background job to finish and want 
> to poll for that job to be ready, and only then update the contents.
> The improvement would be to add a method that gives the developer the option 
> to not update just yet (isReadyForReplacement) and when it returns true, 
> start the replacement. By default this would return true, implementing the 
> current behavior of the AjaxLazyLoadPanel.
> Furthermore to improve the responsiveness of the ALLP it should add a single 
> timer to the page that can be used by multiple ALLPs to update themselves. 
> The timer would poll each second and the ALLPs would use Wicket's event bus 
> to update themselves. With some reference counting, the timer can remove 
> itself from the page when all ALLPs have updated themselves.
> This enables refreshing the page as well when outside an AJAX context, or 
> having a user be impatient and pressing F5.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to