You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@tapestry.apache.org by Yura Tkachenko <tr...@gmail.com> on 2008/03/23 06:11:14 UTC
Page activation context question
Hi All,
I've been reading chapter about "Page Activation Context" here:
http://tapestry.apache.org/tapestry5/tapestry-core/guide/pagenav.html. And I
have a question: can I pass using activation context more than one
parameter?
For example in help we have an example:
void onActivate(long productId) {
setProductId(productId);
loadProduct();
}
long onPassivate() {
return getProductId();
}
Also it was mentioned onPassivate method should be like a mirror of
onActivate. Does it means I can't pass more than one parameter?
Another approach I tried is it create another Java Bean (wrapper object) and
simple try to pass this bean via activation context. In that case my
onActivate and onPassivate were:
void onActivate(PageWrapper wrappedData) {
System.out.println("Activated with message: " + wrappedData);
setWrapper(wrappedData);
}
PageWrapper onPassivate() {
System.out.println("Page is passivated.");
return getWrapper();
}
As the result I got exception. From URL I understood that Typestry during
passing parameter via activation context is converting it to get request. In
my case for wrapped object URL was:
http://localhost:8080/t5first/second/com.packtpub.t5first.utils.PageWrapper%40307efc
After looking to that URL I realized that T5 just call toString of passed
object :-)
So my additional questions:
1) Why not allow to user pass his own objects (POJO)?
2) Why not pass data via HTTP POST? Because as far as I know HTTP (at least
some browsers and http servers) has some limitations to the length of URLs.
Besides sooner or later some smart users will pass string with a few Kbytes
and the page will get wrong data (truncated).
Thanks,
Yura.
Thanks,
Yura.
Re: Page activation context question
Posted by Bill Holloway <bi...@gmail.com>.
Your onActivate method can also take varargs, as in
void onActivate (String... args)
{
_firstObj = restoreFirstObj(args[0]);
if (args[1] != null) _secondObj = restoreSecondObj(args[1]);
...
}
String[] onPassivate ()
{
List<String> args = new ArrayList<String>();
args.add (_firstObj.toString());
if (_secondObj != null) args.add (_secondObj.toString());
....
return (String[]) args.toArray();
}
On Sun, Mar 23, 2008 at 12:11 AM, Yura Tkachenko <
try.tapestry.again@gmail.com> wrote:
> Hi All,
>
> I've been reading chapter about "Page Activation Context" here:
> http://tapestry.apache.org/tapestry5/tapestry-core/guide/pagenav.html. And
> I
> have a question: can I pass using activation context more than one
> parameter?
>
> For example in help we have an example:
>
> void onActivate(long productId) {
> setProductId(productId);
> loadProduct();
> }
>
> long onPassivate() {
> return getProductId();
> }
>
> Also it was mentioned onPassivate method should be like a mirror of
> onActivate. Does it means I can't pass more than one parameter?
> Another approach I tried is it create another Java Bean (wrapper object)
> and
> simple try to pass this bean via activation context. In that case my
> onActivate and onPassivate were:
>
> void onActivate(PageWrapper wrappedData) {
> System.out.println("Activated with message: " + wrappedData);
> setWrapper(wrappedData);
> }
>
> PageWrapper onPassivate() {
> System.out.println("Page is passivated.");
> return getWrapper();
> }
>
> As the result I got exception. From URL I understood that Typestry during
> passing parameter via activation context is converting it to get request.
> In
> my case for wrapped object URL was:
>
> http://localhost:8080/t5first/second/com.packtpub.t5first.utils.PageWrapper%40307efc
> After looking to that URL I realized that T5 just call toString of passed
> object :-)
> So my additional questions:
> 1) Why not allow to user pass his own objects (POJO)?
> 2) Why not pass data via HTTP POST? Because as far as I know HTTP (at
> least
> some browsers and http servers) has some limitations to the length of
> URLs.
> Besides sooner or later some smart users will pass string with a few
> Kbytes
> and the page will get wrong data (truncated).
>
> Thanks,
> Yura.
>
> Thanks,
> Yura.
>