You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@wicket.apache.org by Sylvain Vieujot <sy...@gmail.com> on 2011/09/07 10:51:55 UTC

Stateless page with an auto update section

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.

Re: Stateless page with an auto update section

Posted by Martin Grigorov <mg...@apache.org>.
See jolira-tools Wicket Ajax stateless components and behaviors.
You'll have to roll your own timer behavior.

On Wed, Sep 7, 2011 at 6:20 PM, Sylvain Vieujot <sv...@apache.org> wrote:
> The component is indeed stateless, but adding the
> AjaxSelfUpdatingTimerBehavior prevents it to staying stateless and generates
> an exception like :
>
> Last cause: '[Header [Component id = header]]' claims to be stateless but
> isn't. Possible reasons: no stateless hint, statefull behaviors
>
> WicketMessage: Error attaching this container for rendering: [Page class =
> com.windsOfDubai.web.HomePage, id = 2, render count = 1]
>
> I am trying to add the self updating behaviour whilst keeping the page
> stateless.
>
>
> On Wed, 2011-09-07 at 15:09 +0300, Martin Grigorov wrote:
>
> Hi,
>
> A Component (inc. Page) is stateless by nature.
>
> On Wed, Sep 7, 2011 at 11:51 AM, Sylvain Vieujot
> <sy...@gmail.com> 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.
> Adding Ajax**Behavior to it makes it stateful because this behavior
> needs to do the callback (onTimer() in your case)
>>
>> If in MyPanel, I have :
>> class MyPanel{
>>      ...
>>      @Override
>>      public boolean getStatelessHint(@SuppressWarnings( "unused" )
>> Component
>> component) {
>>           return true;
>>      }
> This makes no difference, since this is the default.
> See org.apache.wicket.Component.getStatelessHint()
>
> But the actual method that decides whether a component is stateless
> is: org.apache.wicket.Component.isStateless()
>>      ...
>> }
>>
>> 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.
>
>
>
>



-- 
Martin Grigorov
jWeekend
Training, Consulting, Development
http://jWeekend.com

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


Re: Stateless page with an auto update section

Posted by Sylvain Vieujot <sv...@apache.org>.
The component is indeed stateless, but adding the
AjaxSelfUpdatingTimerBehavior prevents it to staying stateless and
generates an exception like :

Last cause: '[Header [Component id = header]]' claims to be stateless
but isn't. Possible reasons: no stateless hint, statefull behaviors

WicketMessage: Error attaching this container for rendering: [Page class = com.windsOfDubai.web.HomePage, id = 2, render count = 1]


I am trying to add the self updating behaviour whilst keeping the page
stateless.


On Wed, 2011-09-07 at 15:09 +0300, Martin Grigorov wrote:

> Hi,
> 
> A Component (inc. Page) is stateless by nature.
> 
> On Wed, Sep 7, 2011 at 11:51 AM, Sylvain Vieujot
> <sy...@gmail.com> 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.
> Adding Ajax**Behavior to it makes it stateful because this behavior
> needs to do the callback (onTimer() in your case)
> >
> > If in MyPanel, I have :
> > class MyPanel{
> >      ...
> >      @Override
> >      public boolean getStatelessHint(@SuppressWarnings( "unused" ) Component
> > component) {
> >           return true;
> >      }
> This makes no difference, since this is the default.
> See org.apache.wicket.Component.getStatelessHint()
> 
> But the actual method that decides whether a component is stateless
> is: org.apache.wicket.Component.isStateless()
> >      ...
> > }
> >
> > 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.
> 
> 
> 

Re: Stateless page with an auto update section

Posted by Martin Grigorov <mg...@apache.org>.
Hi,

A Component (inc. Page) is stateless by nature.

On Wed, Sep 7, 2011 at 11:51 AM, Sylvain Vieujot
<sy...@gmail.com> 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.
Adding Ajax**Behavior to it makes it stateful because this behavior
needs to do the callback (onTimer() in your case)
>
> If in MyPanel, I have :
> class MyPanel{
>      ...
>      @Override
>      public boolean getStatelessHint(@SuppressWarnings( "unused" ) Component
> component) {
>           return true;
>      }
This makes no difference, since this is the default.
See org.apache.wicket.Component.getStatelessHint()

But the actual method that decides whether a component is stateless
is: org.apache.wicket.Component.isStateless()
>      ...
> }
>
> 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.



-- 
Martin Grigorov
jWeekend
Training, Consulting, Development
http://jWeekend.com

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