I looked at this code, but it does not really help as it has to bind to an event, whilst I am trying to do an auto update component.
I have 2 questions :
1) Why does the AbstractAjaxBehavior sets the getStatelessHint to
false ?
It seems to me that this "non stateless" hint could be set much lower in
the classe hierarchy, but I must be missing something.
2) The main problem I have is in the component's id generation.
In Component.getMarkupId, line 1505, we have :
final int generatedMarkupId = storedMarkupId instanceof Integer ?
(Integer)storedMarkupId
: getSession().nextSequenceValue();
So on every request, the id changes because of the
getSession().nextSequenceValue().
If in the Behaviour's onBind method, the component's id is fixed, then I
have no problem ... except this is not very clean programming!
public class StatelessAjaxTimerBehavior extends
AjaxSelfUpdatingTimerBehavior {
public StatelessAjaxTimerBehavior(Duration updateInterval) {
super( updateInterval );
}
@Override
public boolean getStatelessHint(@SuppressWarnings( "unused" ) Component
component) {
return true;
}
@Override
protected void onBind() {
getComponent().setMarkupId( "myForcedID" ); // FIXME: This
works, but
is not very clean ... to say the least
super.onBind();
}
}
Is there a recommended way to fix this ?
Thank you,
Sylvain.
On Wed, 2011-09-07 at 08:34 -0700, Igor Vaynberg wrote:
> use something like this [1] as a base and build your own timer behavior
>
> [1]
> https://github.com/jolira/wicket-stateless/blob/master/stateless/src/main/java/com/google/code/joliratools/StatelessAjaxEventBehavior.java
>
> -igor
>
>
> On Wed, Sep 7, 2011 at 3:36 AM, Sylvain Vieujot <[email protected]> wrote:
> > Hello,
> >
> > I have a stateless page, and I would like to periodically refresh a section
> > of this page.
> > If I do :
> >
> > add( new MyPanel( "header" )
> > .setOutputMarkupId( true )
> > .add( new AjaxSelfUpdatingTimerBehavior( Duration.minutes( 2 ) )
> > );
> >
> > The page becomes stateless.
> >
> > If in MyPanel, I have :
> > class MyPanel{
> > ...
> > @Override
> > public boolean getStatelessHint(@SuppressWarnings( "unused" ) Component
> > component) {
> > return true;
> > }
> > ...
> > }
> >
> > The update does not work as the expected component's HTML id does not remain
> > constant :
> >
> > Wicket.Ajax: Wicket.Ajax.Call.processComponent: Component with id
> > [[header2]] was not found while trying to perform markup update. Make sure
> > you called component.setOutputMarkupId(true) on the component whose markup
> > you are trying to update. console.error('Wicket.Ajax: ' + msg);
> > I also tried to use .setVersioned( false ) on both the component and the
> > page, but without success.
> > Is there a way to do this ?
> >
> > Thank you,
> >
> > Sylvain.
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [email protected]
> For additional commands, e-mail: [email protected]
>
signature.asc
Description: This is a digitally signed message part
