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 >
signature.asc
Description: This is a digitally signed message part