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 <svieu...@apache.org> 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: users-unsubscr...@wicket.apache.org
> For additional commands, e-mail: users-h...@wicket.apache.org
> 

Attachment: signature.asc
Description: This is a digitally signed message part

Reply via email to