Finally got this working by changing the following line of code:
newPanel.setOutputMarkupId(true);
to :
newPanel.setOutputMarkupId(true).setOutputMarkupPlaceholderTag(true);
Hopefully this helps someone.
Ryan
On Nov 12, 2009, at 2:57 PM, rjohara wrote:
We are after the same behavior, as well. During the initial page
load, the
AjaxLazyLoadPanel works great. However, after hiding/showing the
image
(using an AjaxLink), the panel no longer loads. I tried using the
custom
ReloadingAjaxLazyPanel, too, and the results were the same as
replacing with
a new panel instance. Any ideas? Below is a code snippet:
final Label gbrowseHideShowLabel = new
Label("gbrowseHideShowLabel",
new LoadableDetachableModel() {
protected Object load() {
return gbrowseHideShowText;
}
});
gbrowseHideShowLabel.setOutputMarkupId(true);
gbrowseLazyLoaded = getNewGbrowseLazyLoaded();
add(gbrowseLazyLoaded);
AjaxLink gbrowseHideShow = new AjaxLink("gbrowseHideShow") {
public void onClick(AjaxRequestTarget target) {
if (!gbrowseVisible) {
gbrowseVisible = true;
gbrowseHideShowText = "Hide image";
user.setImageViewer(true);
} else {
gbrowseVisible = false;
gbrowseHideShowText = "Show image";
user.setImageViewer(false);
}
target.addComponent(gbrowseHideShowLabel);
AjaxLazyLoadPanel newPanel = getNewGbrowseLazyLoaded();
newPanel.setOutputMarkupId(true);
getGbrowseLazyLoaded().replaceWith(newPanel);
setGbrowseLazyLoaded(newPanel);
target.addComponent(newPanel);
}
};
gbrowseHideShow.add(gbrowseHideShowLabel);
add(gbrowseHideShow);
Thanks,
Ryan
igor.vaynberg 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
--
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