Because the designers of HTML haven't figure out yet that an <a> tag should have a method attribute, like a <form>.
Also, the URLs should not be particularly long, as you should be putting in just the ids of objects. If objects are showing up a long MIME encoded serialized strings, you may want to rethink your strategy. On Sun, Mar 23, 2008 at 11:24 AM, Yura Tkachenko <[EMAIL PROTECTED]> wrote: > Thank you Anton. Both solutions are works good for me. But still I have a > question why Tapestry 5 is generating long URL for activation context > instead of sending these data using HTTP POST? > > > > > On Sun, Mar 23, 2008 at 12:54 AM, Anton Litvinenko < > [EMAIL PROTECTED]> wrote: > > > To pass more than parameter, a) from onPassivate method you should > > return an object array: > > > > Object[] onPassivate() { > > return new Object[] {getProductId(), "some string", true}; > > } > > > > b) Then you either define onActivate method as > > > > void onActivate(long productId, String xxx, Boolean yyy) { > > setProductId(productId); > > loadProduct(); > > } > > > > or > > > > void onActivate(Object[] context) { > > Long projectId = Long.parseLong(((String) context[0])); > > .... > > } > > > > In case you decide to use the latter, then you should be aware that > > context contains String representations of objects returned by > > onPassivate. > > > > The second question: to pass your own value objects as context > > parameters you should specify the strategy for converting your object > > to string and restoring its state from the string (i.e. coercer) in > > you AppModule. For instance to specify Date-to-String and > > String-to-Date coercing you'd have to do the following: > > > > public static void > > contributeTypeCoercer(Configuration<CoercionTuple> configuration) { > > Coercion<Date, String> dateToString = new Coercion<Date, String>() > > { > > public String coerce(Date date) { > > return (new > > SimpleDateFormat(DATETIME_PATTERN)).format(date); > > } > > }; > > > > Coercion<String, Date> stringToDate = new Coercion<String, Date>() > > { > > public Date coerce(String date) { > > try { > > return (new > > SimpleDateFormat(DATETIME_PATTERN)).parse(date); > > } catch (ParseException e) { > > throw new RuntimeException("Coercion failed!", e); > > } > > } > > }; > > > > configuration.add(new CoercionTuple<Date, String>(Date.class, > > String.class, dateToString)); > > configuration.add(new CoercionTuple<String, > > Date>(String.class, Date.class, stringToDate)); > > } > > > > Check this for more: > > http://tapestry.apache.org/tapestry5/tapestry-ioc/coerce.html > > > > Good luck! > > Anton > > > > On Sun, Mar 23, 2008 at 8:32 AM, Yura Tkachenko > > <[EMAIL PROTECTED]> wrote: > > > And how I can pass more than one parameter? Or did you mean "I cannot > > pass > > > more than one parameter"? > > > > > > Thanks, > > > Yura. > > > > > > > > > > > > On Sat, Mar 22, 2008 at 10:46 PM, SergeEby <[EMAIL PROTECTED]> wrote: > > > > > > > > > > > Hi, > > > > > > > > You can pass more than one parameter. > > > > > > > > /Serge > > > > > > > > > > > > Yura Tkachenko 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). > > > > > > > > > > > > > > > > > > -- > > > > View this message in context: > > > > > > > http://www.nabble.com/Page-activation-context-question-tp16231642p16231791.html > > > > Sent from the Tapestry - User mailing list archive at Nabble.com. > > > > > > > > > > > > --------------------------------------------------------------------- > > > > To unsubscribe, e-mail: [EMAIL PROTECTED] > > > > For additional commands, e-mail: [EMAIL PROTECTED] > > > > > > > > > > > > > > > > > > > -- > > http://www.sourcekibitzer.org > > > > --------------------------------------------------------------------- > > To unsubscribe, e-mail: [EMAIL PROTECTED] > > For additional commands, e-mail: [EMAIL PROTECTED] > > > > > -- Howard M. Lewis Ship Creator Apache Tapestry and Apache HiveMind --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]