Geoff Callender wrote: > Hi Joel, > > The activation context is great for passing object ids (or entity > ids), and with database backed applications that is exactly what you'd > be doing most of the time. The notion behind REST is that each URL > represents a resource, which is pretty much what ids represent too. > > I agree that it would be good to be able to turn on > name/value/name/value URLs built automatically by Tapestry, but only > for resource-style URLs (which is what REST is all about). > > Filter criteria, however, I think deserve different treatment, ie.they > should be added as a query string. I thoroughly agree that it would > be good if T5 provided a formalised way of handling this difference > that didn't involve us building our own Links. I think, they basically could be handled the same way as regular activation context. There could be two event methods, Map<String, Object> onPassivateParameters()/onActivateParameters(Map<String, Object> params) with similar meaning to onActivate and onPassivate. Also, there could be an annotation @QueryParameter, which will work the same way as @PageActivationContext.
I’ve already implemented something similar, I described the idea here: http://www.nabble.com/Re%3A-%22named%22-page-context-parameters---p19893835.html Hovewer, this solution is limited in several aspects. First of all, you cannot override the parameters the same way you can override the activation context in the resources.create*Link() calls. That makes generating the links a bit more cumbersome (you have to save old value of field marked by @QueryParameter, then set value you need, then generate link and finally restore the previous field value). Secondly, the framework does not allows specifying empty parameter values. For example, I want “/orders” to works the same as “/orders?status=NEW” and “/orders?status=” to show all orders (not only new). And finally, Tapestry does not allow having multiple parameters with same name (for example, “/orders&status=NEW&status=REJECTED”, which is correct URL). > > BTW, the current options are on demonstration at > http://202.177.217.122:8080/jumpstart/examples/state/passingdatabetweenpages1 > > > Cheers, > > Geoff > > On 13/10/2008, at 12:08 AM, Joel Halbert wrote: > >> I'm a new T5 user so wasn't familiar with the pattern below for >> adding params to links, I'll definitely try it out. >> >> However, If you go down the route you suggest below for passing >> parameters between page, then what is the true value in the >> activation context in the first place other than for the most simple >> of requirements - (given that it seems unwieldy for large numbers of >> parameters) ? >> >> Additionally, I would suggest that *how* activation context >> parameters are encoded onto the URL should be configurable, so you >> could choose to encode your activation parameters like this a/b/c/d >> or like this a=b&c=d , or any other encoding mechanism you want. >> >> I really want to like the T5 framework, and in my limited experience >> (4 days!) I think I do, especially because it seems much leaner and >> more scalable than say Wicket, something I have used more extensively >> and which because of its component based nature, and lack of page >> pooling, creates and enormous amount of objects per page request >> which then need to be cleaned up - a bit wasteful if you are only >> creating stateless pages. >> However I was quite suprised by what that I saw as a gap in native >> (out the box & convenient & maintainable) support for truly stateless >> pages in T5. As a stop gap I have got round the problem by writing a >> custom ValueEncoder to encode and decode HashMap objects onto the >> activation context, as a string like this key1_value1_key2_value2 >> etc, that way I work within the framework but with full support for >> named parameters. >> >> I think the ideal solution (for an end user at least!) would be to >> make it such that the @Persist("client") notation did all the hard >> work of encoding primitive params on to a query sting, but more >> concisely that it currently does >> >> i.e. what cann't a primitive variable such as >> >> @Persist("client") >> private String name; >> >> be simply encoded onto the url as "name=value" rather than the >> current solution of an enourmously long encoded value? >> If this were to happen then I think T5 really would be a truly great >> framework! >> >> Thx, >> Joel >> >> >> Geoff Callender wrote: >>> I'm not keen on the named context parameters idea. There's a >>> persuasive argument for putting filter parameters into the query >>> string portion of the URL instead of in the context. >>> http://blpsilva.wordpress.com/2008/04/05/query-strings-in-restful-web-services/ >>> >>> >>> So you get a URL like this >>> http://localhost:8080/myapp/mypage?firstname=Humpty&lastname=Dumpty >>> instead of this >>> http://localhost:8080/myapp/mypage/firstname/Humpty/lastname/Dumpty >>> >>> It's easy enough to do: >>> @Inject >>> private ComponentResources _componentResources; >>> >>> @Inject >>> private Request _request; >>> >>> public Link set(String firstName, String lastName) { >>> Link link = >>> _componentResources.createPageLink(this.getClass(), true); >>> >>> if (firstName != null) { >>> link.addParameter("firstname", firstName); >>> } >>> if (lastName != null) { >>> link.addParameter("lastname", lastName); >>> } >>> return link; >>> } >>> >>> void onActivate() { >>> _firstName = _request.getParameter("firstname"); >>> _lastName = _request.getParameter("lastname"); >>> } >>> >>> On 11/10/2008, at 12:37 AM, Joel Halbert wrote: >>> >>>> I tend to try and keep all my pages as stateless as possible, you >>>> can then quite easily require a few query string parameters per >>>> page when this is the case, consider the case of browsing a >>>> storefront - you need a "category id" (e.g. books, shoes), a page >>>> number (for the current page if looking at paginated data) and a >>>> "sort by" field (for the clients sort by selection). Already we >>>> have 3. There can easily be more, say if the client is "filtering" >>>> the view. >>>> >>>> Thiago H. de Paula Figueiredo wrote: >>>>> Em Fri, 10 Oct 2008 09:58:23 -0300, Joel Halbert >>>>> <[EMAIL PROTECTED]> escreveu: >>>>> >>>>>> I was wondering whether anyone missed the lack of direct support >>>>>> for named context parameters? >>>>>> I try to keep my pages as stateless as possible (thus >>>>>> bookmarkable) and better support for "named" context variables >>>>>> would make this much easier. >>>>> >>>>> I haven't missed named context parameters because my pages, almost >>>>> all the time, need just one parameter, sometimes two, so there is >>>>> no need to name them. >>>>> >>>> >>>> -- >>>> SU3 Analytics Ltd >>>> 61b Oxford Gardens >>>> W10 5UJ >>>> London >>>> >>>> Tel: +44 20 8960 2634 >>>> Mob: +44 75 2501 0825 >>>> www.su3analytics.com >>>> >>>> SU3 Analytics Ltd is a company registered in England and Wales >>>> under company number 06639473 at registered address 61b Oxford >>>> Gardens, London W10 5UJ, United Kingdom. >>>> >>>> >>>> >>>> --------------------------------------------------------------------- >>>> To unsubscribe, e-mail: [EMAIL PROTECTED] >>>> For additional commands, e-mail: [EMAIL PROTECTED] >>>> >>> >>> >> >> -- >> SU3 Analytics Ltd >> 61b Oxford Gardens >> W10 5UJ >> London >> >> Tel: +44 20 8960 2634 >> Mob: +44 75 2501 0825 >> www.su3analytics.com >> >> SU3 Analytics Ltd is a company registered in England and Wales under >> company number 06639473 at registered address 61b Oxford Gardens, >> London W10 5UJ, United Kingdom. >> >> >> >> --------------------------------------------------------------------- >> To unsubscribe, e-mail: [EMAIL PROTECTED] >> For additional commands, e-mail: [EMAIL PROTECTED] >> > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > > -- WBR, Ivan S. Dubrov --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]