Re: Restarting AjaxLazyLoadingPanel

2009-11-13 Thread Ryan O'Hara

system.

Regards,
Antony Stubbs,
NZ
http://friendfeed.com/astubbs




-
To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org
For additional commands, e-mail: users-h...@wicket.apache.org





--
View this message in context: 
http://old.nabble.com/Restarting-AjaxLazyLoadingPanel-tp23792018p26325186.html
Sent from the Wicket - User mailing list archive at Nabble.com.


-
To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org
For additional commands, e-mail: users-h...@wicket.apache.org





-
To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org
For additional commands, e-mail: users-h...@wicket.apache.org



Re: Restarting AjaxLazyLoadingPanel

2009-11-12 Thread rjohara
: users-h...@wicket.apache.org
 
 
 

-- 
View this message in context: 
http://old.nabble.com/Restarting-AjaxLazyLoadingPanel-tp23792018p26325186.html
Sent from the Wicket - User mailing list archive at Nabble.com.


-
To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org
For additional commands, e-mail: users-h...@wicket.apache.org



Restarting AjaxLazyLoadingPanel

2009-05-30 Thread Antony Stubbs
We use AjaxLazyLoadingPanel, and want to be able to trigger the  
process of showing the indicator, and requesting the panels contents  
with a separate Ajax request, after the first complete render has  
finished. I.e. do the whole process over and over, without having to  
reload the entire page.


I came up with this, which I was surprised actually worked first  
try :) gotta love Wicket.


But perhaps there's a better way to do it ? A simpler way? Something  
I'm missing? I tried simply replacing the lazy loading panel with a  
new instance of one but that didn't seem to have an effect - I think  
the magic is in the adding a new AbstractAjaxBehaviour on each request.



import org.apache.wicket.Component;
import org.apache.wicket.ajax.AbstractDefaultAjaxBehavior;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.extensions.ajax.markup.html.AjaxLazyLoadPanel;
import org.apache.wicket.markup.html.IHeaderResponse;

/**
 * An {...@link AjaxLazyLoadPanel} extension which allows it to
 * {...@link #restart(AjaxRequestTarget)} the process of showing the  
loading

 * indicator, then load it's contents using a separate Ajax request.
 *
 * @author Antony Stubbs
 */
abstract public class ReloadingAjaxLazyPanel extends AjaxLazyLoadPanel {

private static final long serialVersionUID = 1L;

public ReloadingAjaxLazyPanel(String id) {
super( id );
}

/**
 * Causes the {...@link AjaxLazyLoadPanel} to re-display the loading  
indicator,

 * then in a seperate ajax request, get it's contents.
 *
 * @param target
 */
public void restart(AjaxRequestTarget target) {
target.addComponent( this );

// replace panel contents with loading icon
Component loadingComponent = getLoadingComponent( content );

this.replace( loadingComponent );

// add ajax behaviour to install call back
loadingComponent.add( new AbstractDefaultAjaxBehavior() {

private static final long serialVersionUID = 1L;

@Override
protected void respond(AjaxRequestTarget target) {
Component component =  
ReloadingAjaxLazyPanel.this.getLazyLoadComponent( content );
 
ReloadingAjaxLazyPanel 
.this.replace( component.setRenderBodyOnly( true ) );

target.addComponent( ReloadingAjaxLazyPanel.this );
// setState((byte)2);
}

@Override
public void renderHead(IHeaderResponse response) {
super.renderHead( response );
 
response.renderOnDomReadyJavascript( getCallbackScript().toString() );

}

} );
}

}

As you can see, there is duplication from AjaxLazyLoadingPanel - which  
would need re-factoring in order to remove. - no problem there.
But also, because the setState method is private, I can't use that  
state system.


Regards,
Antony Stubbs,
NZ
http://friendfeed.com/astubbs



Re: Restarting AjaxLazyLoadingPanel

2009-05-30 Thread Igor Vaynberg
you can just replace the entire panel with a new instance.

-igor

On Sat, May 30, 2009 at 3:11 AM, Antony Stubbs antony.stu...@gmail.com wrote:
 We use AjaxLazyLoadingPanel, and want to be able to trigger the process of
 showing the indicator, and requesting the panels contents with a separate
 Ajax request, after the first complete render has finished. I.e. do the
 whole process over and over, without having to reload the entire page.

 I came up with this, which I was surprised actually worked first try :)
 gotta love Wicket.

 But perhaps there's a better way to do it ? A simpler way? Something I'm
 missing? I tried simply replacing the lazy loading panel with a new instance
 of one but that didn't seem to have an effect - I think the magic is in the
 adding a new AbstractAjaxBehaviour on each request.


 import org.apache.wicket.Component;
 import org.apache.wicket.ajax.AbstractDefaultAjaxBehavior;
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.extensions.ajax.markup.html.AjaxLazyLoadPanel;
 import org.apache.wicket.markup.html.IHeaderResponse;

 /**
  * An {...@link AjaxLazyLoadPanel} extension which allows it to
  * {...@link #restart(AjaxRequestTarget)} the process of showing the loading
  * indicator, then load it's contents using a separate Ajax request.
  *
  * @author Antony Stubbs
  */
 abstract public class ReloadingAjaxLazyPanel extends AjaxLazyLoadPanel {

    private static final long serialVersionUID = 1L;

    public ReloadingAjaxLazyPanel(String id) {
        super( id );
    }

    /**
     * Causes the {...@link AjaxLazyLoadPanel} to re-display the loading
 indicator,
     * then in a seperate ajax request, get it's contents.
     *
     * @param target
     */
    public void restart(AjaxRequestTarget target) {
        target.addComponent( this );

        // replace panel contents with loading icon
        Component loadingComponent = getLoadingComponent( content );

        this.replace( loadingComponent );

        // add ajax behaviour to install call back
        loadingComponent.add( new AbstractDefaultAjaxBehavior() {

            private static final long serialVersionUID = 1L;

           �...@override
            protected void respond(AjaxRequestTarget target) {
                Component component =
 ReloadingAjaxLazyPanel.this.getLazyLoadComponent( content );
                ReloadingAjaxLazyPanel.this.replace(
 component.setRenderBodyOnly( true ) );
                target.addComponent( ReloadingAjaxLazyPanel.this );
                // setState((byte)2);
            }

           �...@override
            public void renderHead(IHeaderResponse response) {
                super.renderHead( response );
                response.renderOnDomReadyJavascript(
 getCallbackScript().toString() );
            }

        } );
    }

 }

 As you can see, there is duplication from AjaxLazyLoadingPanel - which would
 need re-factoring in order to remove. - no problem there.
 But also, because the setState method is private, I can't use that state
 system.

 Regards,
 Antony Stubbs,
 NZ
 http://friendfeed.com/astubbs



-
To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org
For additional commands, e-mail: users-h...@wicket.apache.org



Re: Restarting AjaxLazyLoadingPanel

2009-05-30 Thread Antony Stubbs
Yeah that's what I thought. And I tried it, but visually nothing  
happened. I'll give it another shot.


Sent from my iPhone
http://friendfeed.com/astubbs

On 31/05/2009, at 7:15 AM, Igor Vaynberg igor.vaynb...@gmail.com  
wrote:



you can just replace the entire panel with a new instance.

-igor

On Sat, May 30, 2009 at 3:11 AM, Antony Stubbs antony.stu...@gmail.com 
 wrote:
We use AjaxLazyLoadingPanel, and want to be able to trigger the  
process of
showing the indicator, and requesting the panels contents with a  
separate
Ajax request, after the first complete render has finished. I.e. do  
the
whole process over and over, without having to reload the entire  
page.


I came up with this, which I was surprised actually worked first  
try :)

gotta love Wicket.

But perhaps there's a better way to do it ? A simpler way?  
Something I'm
missing? I tried simply replacing the lazy loading panel with a new  
instance
of one but that didn't seem to have an effect - I think the magic  
is in the

adding a new AbstractAjaxBehaviour on each request.


import org.apache.wicket.Component;
import org.apache.wicket.ajax.AbstractDefaultAjaxBehavior;
import org.apache.wicket.ajax.AjaxRequestTarget;
import  
org.apache.wicket.extensions.ajax.markup.html.AjaxLazyLoadPanel;

import org.apache.wicket.markup.html.IHeaderResponse;

/**
 * An {...@link AjaxLazyLoadPanel} extension which allows it to
 * {...@link #restart(AjaxRequestTarget)} the process of showing the  
loading

 * indicator, then load it's contents using a separate Ajax request.
 *
 * @author Antony Stubbs
 */
abstract public class ReloadingAjaxLazyPanel extends  
AjaxLazyLoadPanel {


   private static final long serialVersionUID = 1L;

   public ReloadingAjaxLazyPanel(String id) {
   super( id );
   }

   /**
* Causes the {...@link AjaxLazyLoadPanel} to re-display the loading
indicator,
* then in a seperate ajax request, get it's contents.
*
* @param target
*/
   public void restart(AjaxRequestTarget target) {
   target.addComponent( this );

   // replace panel contents with loading icon
   Component loadingComponent = getLoadingComponent( content );

   this.replace( loadingComponent );

   // add ajax behaviour to install call back
   loadingComponent.add( new AbstractDefaultAjaxBehavior() {

   private static final long serialVersionUID = 1L;

   @Override
   protected void respond(AjaxRequestTarget target) {
   Component component =
ReloadingAjaxLazyPanel.this.getLazyLoadComponent( content );
   ReloadingAjaxLazyPanel.this.replace(
component.setRenderBodyOnly( true ) );
   target.addComponent( ReloadingAjaxLazyPanel.this );
   // setState((byte)2);
   }

   @Override
   public void renderHead(IHeaderResponse response) {
   super.renderHead( response );
   response.renderOnDomReadyJavascript(
getCallbackScript().toString() );
   }

   } );
   }

}

As you can see, there is duplication from AjaxLazyLoadingPanel -  
which would

need re-factoring in order to remove. - no problem there.
But also, because the setState method is private, I can't use that  
state

system.

Regards,
Antony Stubbs,
NZ
http://friendfeed.com/astubbs




-
To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org
For additional commands, e-mail: users-h...@wicket.apache.org



-
To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org
For additional commands, e-mail: users-h...@wicket.apache.org