You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@tapestry.apache.org by Britske <gb...@gmail.com> on 2007/10/24 11:39:17 UTC

[T5]: how to prevent onActivate() from firing with activationcontext

for a page, I have two activation-methods:

onActivate()
onActivate(Object[] list);

when i provide an activation context to the page both methods are called
-onactivate() first-.
This seems correct behavior according to some forum-posts i've read. 

However, both methods call a method syncLists() which does a pretty
expensive operation (get search results  based on the activation context or
default if no activation context exists). 

The problem is that now syncLists() is called twice when the page has an
activation-context (based on calling both of the onActivate()-methods).
Obviously this is unwanted. 

However, I can't remove syncLists() from onActivate() (without params),
because a page-access without activation-context should call syncLists() as
well. 

so what i need to do is 
a. have onActivate() not called when an activatecontext exists
b. detect in onActivate() that an activationcontext exists and based on that
not call syncLists(). 
c. don't have syncLists() updated on onActivate() but on a change of the
page (so before the "redirect-after-post") 

I can't find a way to do A. or B. while C. doesn't seem the best option,
because a lot of fields (on the page and in components) would need to be
tagged with @Persist to survive setting them on post and then redirecting. 

Anyone?

Thanks,
Geert-Jan
-- 
View this message in context: http://www.nabble.com/-T5-%3A-how-to-prevent-onActivate%28%29-from-firing-with-activationcontext-tf4683298.html#a13382460
Sent from the Tapestry - User mailing list archive at Nabble.com.


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


Re: [T5]: how to prevent onActivate() from firing with activationcontext

Posted by Christian Gruber <ch...@gmail.com>.
This feels a little kludgy, but you can always use a signal that is  
reset at some time after the activation.  syncLists would then just  
check that boolean signal to see if it had already been run.

Alternately, If you have a spring-style prototype scope in your  
services (ie, created anew for each injection) then you can move  
syncLists into a prototyped service so that it is, itself, a new  
instance for each inject.  Then syncLists() on that service can call  
internal (hidden) signalling to ensure it is only called once per  
lifetime.

The latter is a bit of extra infrastructure, but I have often used  
prototype-scope to get one-shot behaviour like this.  If you have  
other need of this same scope, then it can be useful.

Christian.

On 24-Oct-07, at 5:39 AM, Britske wrote:

>
> for a page, I have two activation-methods:
>
> onActivate()
> onActivate(Object[] list);
>
> when i provide an activation context to the page both methods are  
> called
> -onactivate() first-.
> This seems correct behavior according to some forum-posts i've read.
>
> However, both methods call a method syncLists() which does a pretty
> expensive operation (get search results  based on the activation  
> context or
> default if no activation context exists).
>
> The problem is that now syncLists() is called twice when the page  
> has an
> activation-context (based on calling both of the onActivate()- 
> methods).
> Obviously this is unwanted.
>
> However, I can't remove syncLists() from onActivate() (without  
> params),
> because a page-access without activation-context should call  
> syncLists() as
> well.
>
> so what i need to do is
> a. have onActivate() not called when an activatecontext exists
> b. detect in onActivate() that an activationcontext exists and based  
> on that
> not call syncLists().
> c. don't have syncLists() updated on onActivate() but on a change of  
> the
> page (so before the "redirect-after-post")
>
> I can't find a way to do A. or B. while C. doesn't seem the best  
> option,
> because a lot of fields (on the page and in components) would need  
> to be
> tagged with @Persist to survive setting them on post and then  
> redirecting.
>
> Anyone?
>
> Thanks,
> Geert-Jan
> -- 
> View this message in context: http://www.nabble.com/-T5-%3A-how-to-prevent-onActivate%28%29-from-firing-with-activationcontext-tf4683298.html#a13382460
> Sent from the Tapestry - User mailing list archive at Nabble.com.
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
> For additional commands, e-mail: users-help@tapestry.apache.org
>


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


Expanding Table rows with Ajax

Posted by su...@gmx.de.
Has anyone ever tried to expand table rows to show more details
with Tapestry & Ajax ?


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


Re: [T5]: how to prevent onActivate() from firing with activationcontext

Posted by Britske <gb...@gmail.com>.
Make that: 

onActivate(Object[] list)
{
  if(params==null || params!=list) //actually a method doing a compare on
the elements of the list
 {
   //handle context
   params = list;
 }
} 


Britske wrote:
> 
> Thanks, removed the onActivate() without params. 
> 
> Moreover, i didn't test fully and discovered that on a post onActivate is
> called once with the context of the old page and once with the context of
> the new page, so it's not always empty the first time. Probably saying the
> obvious but anyway..  Only in the latter case should the onActivate result
> in update of my lists. 
> 
> for that i have the following to track the current activation-context 
> 
> @Persist Object[] params;  
> 
> now i do: 
> 
> onActivate(Object[] list)
> {
>   if(params!=list) //actually a method doing a compare on the elements of
> the list
>  {
>    //handle context
>    params = list;
>  }
> } 
> 
> thanks for helping me in the right direction,
> Geert-Jan
> 
> 
> 
> Nick Westgate wrote:
>> 
>> I'm not going to delve into the logic of your use case.
>> Just put have one activate handler:
>> 
>> void onActivate(Object[] context)
>> {
>>      if (context.length == 0)
>>      {
>>          // handle no context
>>      {
>>      else
>>      {
>>          // handle context
>>      {
>> }
>> 
>> Cheers,
>> Nick.
>> 
>> 
>> Britske wrote:
>>> for a page, I have two activation-methods:
>>> 
>>> onActivate()
>>> onActivate(Object[] list);
>>> 
>>> when i provide an activation context to the page both methods are called
>>> -onactivate() first-.
>>> This seems correct behavior according to some forum-posts i've read. 
>>> 
>>> However, both methods call a method syncLists() which does a pretty
>>> expensive operation (get search results  based on the activation context
>>> or
>>> default if no activation context exists). 
>>> 
>>> The problem is that now syncLists() is called twice when the page has an
>>> activation-context (based on calling both of the onActivate()-methods).
>>> Obviously this is unwanted. 
>>> 
>>> However, I can't remove syncLists() from onActivate() (without params),
>>> because a page-access without activation-context should call syncLists()
>>> as
>>> well. 
>>> 
>>> so what i need to do is 
>>> a. have onActivate() not called when an activatecontext exists
>>> b. detect in onActivate() that an activationcontext exists and based on
>>> that
>>> not call syncLists(). 
>>> c. don't have syncLists() updated on onActivate() but on a change of the
>>> page (so before the "redirect-after-post") 
>>> 
>>> I can't find a way to do A. or B. while C. doesn't seem the best option,
>>> because a lot of fields (on the page and in components) would need to be
>>> tagged with @Persist to survive setting them on post and then
>>> redirecting. 
>>> 
>>> Anyone?
>>> 
>>> Thanks,
>>> Geert-Jan
>> 
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
>> For additional commands, e-mail: users-help@tapestry.apache.org
>> 
>> 
>> 
> 
> 

-- 
View this message in context: http://www.nabble.com/-T5-%3A-how-to-prevent-onActivate%28%29-from-firing-with-activationcontext-tf4683298.html#a13384953
Sent from the Tapestry - User mailing list archive at Nabble.com.


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


Re: [T5]: how to prevent onActivate() from firing with activationcontext

Posted by Britske <gb...@gmail.com>.
Thanks, removed the onActivate() without params. 

Moreover, i didn't test fully and discovered that on a post onActivate is
called once with the context of the old page and once with the context of
the new page, so it's not always empty the first time. Probably saying the
obvious but anyway..  Only in the latter case should the onActivate result
in update of my lists. 

for that i have the following to track the current activation-context 

@Persist Object[] params;  

now i do: 

onActivate(Object[] list)
{
  if(params!=list) //actually a method doing a compare on the elements of
the list
 {
   //handle context
   params = list;
 }
} 

thanks for helping me in the right direction,
Geert-Jan



Nick Westgate wrote:
> 
> I'm not going to delve into the logic of your use case.
> Just put have one activate handler:
> 
> void onActivate(Object[] context)
> {
>      if (context.length == 0)
>      {
>          // handle no context
>      {
>      else
>      {
>          // handle context
>      {
> }
> 
> Cheers,
> Nick.
> 
> 
> Britske wrote:
>> for a page, I have two activation-methods:
>> 
>> onActivate()
>> onActivate(Object[] list);
>> 
>> when i provide an activation context to the page both methods are called
>> -onactivate() first-.
>> This seems correct behavior according to some forum-posts i've read. 
>> 
>> However, both methods call a method syncLists() which does a pretty
>> expensive operation (get search results  based on the activation context
>> or
>> default if no activation context exists). 
>> 
>> The problem is that now syncLists() is called twice when the page has an
>> activation-context (based on calling both of the onActivate()-methods).
>> Obviously this is unwanted. 
>> 
>> However, I can't remove syncLists() from onActivate() (without params),
>> because a page-access without activation-context should call syncLists()
>> as
>> well. 
>> 
>> so what i need to do is 
>> a. have onActivate() not called when an activatecontext exists
>> b. detect in onActivate() that an activationcontext exists and based on
>> that
>> not call syncLists(). 
>> c. don't have syncLists() updated on onActivate() but on a change of the
>> page (so before the "redirect-after-post") 
>> 
>> I can't find a way to do A. or B. while C. doesn't seem the best option,
>> because a lot of fields (on the page and in components) would need to be
>> tagged with @Persist to survive setting them on post and then
>> redirecting. 
>> 
>> Anyone?
>> 
>> Thanks,
>> Geert-Jan
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
> For additional commands, e-mail: users-help@tapestry.apache.org
> 
> 
> 

-- 
View this message in context: http://www.nabble.com/-T5-%3A-how-to-prevent-onActivate%28%29-from-firing-with-activationcontext-tf4683298.html#a13384950
Sent from the Tapestry - User mailing list archive at Nabble.com.


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


Re: [T5]: how to prevent onActivate() from firing with activationcontext

Posted by Nick Westgate <ni...@key-planning.co.jp>.
I'm not going to delve into the logic of your use case.
Just put have one activate handler:

void onActivate(Object[] context)
{
     if (context.length == 0)
     {
         // handle no context
     {
     else
     {
         // handle context
     {
}

Cheers,
Nick.


Britske wrote:
> for a page, I have two activation-methods:
> 
> onActivate()
> onActivate(Object[] list);
> 
> when i provide an activation context to the page both methods are called
> -onactivate() first-.
> This seems correct behavior according to some forum-posts i've read. 
> 
> However, both methods call a method syncLists() which does a pretty
> expensive operation (get search results  based on the activation context or
> default if no activation context exists). 
> 
> The problem is that now syncLists() is called twice when the page has an
> activation-context (based on calling both of the onActivate()-methods).
> Obviously this is unwanted. 
> 
> However, I can't remove syncLists() from onActivate() (without params),
> because a page-access without activation-context should call syncLists() as
> well. 
> 
> so what i need to do is 
> a. have onActivate() not called when an activatecontext exists
> b. detect in onActivate() that an activationcontext exists and based on that
> not call syncLists(). 
> c. don't have syncLists() updated on onActivate() but on a change of the
> page (so before the "redirect-after-post") 
> 
> I can't find a way to do A. or B. while C. doesn't seem the best option,
> because a lot of fields (on the page and in components) would need to be
> tagged with @Persist to survive setting them on post and then redirecting. 
> 
> Anyone?
> 
> Thanks,
> Geert-Jan

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