Patching Tapestry for IE9 Prototype Bug
Hi Folks, We're on T 5.2.4. Are these instructions for patching Tap for IE9 up-to-date? http://tapestry.1045711.n5.nabble.com/Re-Prototype-IE9-update-td4331824.html The tapestry-js-fixes.js file Howard refers to seems not to exist. https://github.com/hlship/tapx/blob/master/tapx-prototype/src/main/resources/com/howardlewisship/tapx/prototype/tapestry-js-fixes.js Pointers appreciated Joel Halbert http://www.webalertpro.com http://twitter.com/webalertpro - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: Patching Tapestry for IE9 Prototype Bug
Oof, does this https://github.com/hlship/tapx/commit/6088137226a045e03faca2e1c4e0cb62f94c9c3c mean that we need to upgrade to 5.3 to fix this? Does anyone have a version of the original patch or know how I can access it from git-hub? On Wed, 2011-08-24 at 11:34 +0100, Joel Halbert wrote: Hi Folks, We're on T 5.2.4. Are these instructions for patching Tap for IE9 up-to-date? http://tapestry.1045711.n5.nabble.com/Re-Prototype-IE9-update-td4331824.html The tapestry-js-fixes.js file Howard refers to seems not to exist. https://github.com/hlship/tapx/blob/master/tapx-prototype/src/main/resources/com/howardlewisship/tapx/prototype/tapestry-js-fixes.js Pointers appreciated Joel Halbert http://www.webalertpro.com http://twitter.com/webalertpro - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: Patching Tapestry for IE9 Prototype Bug
Who knows, and even if it is, what next? On Wed, 2011-08-24 at 06:57 -0500, Barry Books wrote: Is this the commit? https://github.com/hlship/tapx/commit/46e1ca9d4a6463feb708e0d3074ca759690331dd - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: Patching Tapestry for IE9 Prototype Bug
rant It's pretty frustrating there there is no procedure on the Tap website for patching 5.2.X for the prototype IE9 bug. And any links in the mailing list archive that point to git have expired. I'd have thought this was a pretty serious bug. Unfortunately for us we've only just realised it's affecting our users (our bad for not testing IE9 properly). In frustration I'm now downloading the 5.3 alpha - with all the headaches a version upgrade entails (breaking changes / testing etc...) But it seems there are only source files available for 5.3, which is fine but ant now seems to insist on various maven artefacts, or it barfs. Why does everything need to go through maven/gradle/yet-another-random-build-system ? What's wrong with a simple ant build? /rant Anyway, are there a) any binaries for 5.3 or a simple ant build target ? b) a comprehensive patch with instructions for the IE9 zone/prototype bug ? On Wed, 2011-08-24 at 12:11 +0100, Joel Halbert wrote: Oof, does this https://github.com/hlship/tapx/commit/6088137226a045e03faca2e1c4e0cb62f94c9c3c mean that we need to upgrade to 5.3 to fix this? Does anyone have a version of the original patch or know how I can access it from git-hub? On Wed, 2011-08-24 at 11:34 +0100, Joel Halbert wrote: Hi Folks, We're on T 5.2.4. Are these instructions for patching Tap for IE9 up-to-date? http://tapestry.1045711.n5.nabble.com/Re-Prototype-IE9-update-td4331824.html The tapestry-js-fixes.js file Howard refers to seems not to exist. https://github.com/hlship/tapx/blob/master/tapx-prototype/src/main/resources/com/howardlewisship/tapx/prototype/tapestry-js-fixes.js Pointers appreciated Joel Halbert http://www.webalertpro.com http://twitter.com/webalertpro - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: Patching Tapestry for IE9 Prototype Bug
Would be good if that's the case, I'll try it out. Since it wasn't listed as a bug fix I presumed it was not included. Presumably Tap's not counting it as a bug since it's in the js libs? On Wed, 2011-08-24 at 14:50 +0200, Chris Poulsen wrote: Hi, I haven't been following this closely, but are you sure that the most recent 5.2 build (5.2.6) does not contain what you need? It has some updates to the js libs as far as i can tell from the release notes? http://tapestry.apache.org/release-notes-52.html#ReleaseNotes5.2-ReleaseNotes%253ATapestry5.2.6 - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: Patching Tapestry for IE9 Prototype Bug
So the reason I went straight to 5.3 was that the following BUG fix is listed in the 5.3 release notes: [TAP5-1257] - Javascript error with IE Prototype still in 1.7 Any confirmation from the dev team as to the right version to use to fix the zone update bug (see link) in IE9 much appreciated. http://tapestry.1045711.n5.nabble.com/Re-Prototype-IE9-update-td4331824.html On Wed, 2011-08-24 at 13:53 +0100, Joel Halbert wrote: Would be good if that's the case, I'll try it out. Since it wasn't listed as a bug fix I presumed it was not included. Presumably Tap's not counting it as a bug since it's in the js libs? On Wed, 2011-08-24 at 14:50 +0200, Chris Poulsen wrote: Hi, I haven't been following this closely, but are you sure that the most recent 5.2 build (5.2.6) does not contain what you need? It has some updates to the js libs as far as i can tell from the release notes? http://tapestry.apache.org/release-notes-52.html#ReleaseNotes5.2-ReleaseNotes%253ATapestry5.2.6 - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: Patching Tapestry for IE9 Prototype Bug
Having read the bug comments I'm guessing TAP5-1257 is unrelated to the IE9 issue so presumably 5.2.6 is the right version... https://issues.apache.org/jira/browse/TAP5-1257 On Wed, 2011-08-24 at 13:56 +0100, Joel Halbert wrote: So the reason I went straight to 5.3 was that the following BUG fix is listed in the 5.3 release notes: [TAP5-1257] - Javascript error with IE Prototype still in 1.7 Any confirmation from the dev team as to the right version to use to fix the zone update bug (see link) in IE9 much appreciated. http://tapestry.1045711.n5.nabble.com/Re-Prototype-IE9-update-td4331824.html On Wed, 2011-08-24 at 13:53 +0100, Joel Halbert wrote: Would be good if that's the case, I'll try it out. Since it wasn't listed as a bug fix I presumed it was not included. Presumably Tap's not counting it as a bug since it's in the js libs? On Wed, 2011-08-24 at 14:50 +0200, Chris Poulsen wrote: Hi, I haven't been following this closely, but are you sure that the most recent 5.2 build (5.2.6) does not contain what you need? It has some updates to the js libs as far as i can tell from the release notes? http://tapestry.apache.org/release-notes-52.html#ReleaseNotes5.2-ReleaseNotes%253ATapestry5.2.6 - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: Patching Tapestry for IE9 Prototype Bug
Confirmed, 5.2.6 fixes the problem in IE9. On Wed, 2011-08-24 at 14:00 +0100, Joel Halbert wrote: Having read the bug comments I'm guessing TAP5-1257 is unrelated to the IE9 issue so presumably 5.2.6 is the right version... https://issues.apache.org/jira/browse/TAP5-1257 On Wed, 2011-08-24 at 13:56 +0100, Joel Halbert wrote: So the reason I went straight to 5.3 was that the following BUG fix is listed in the 5.3 release notes: [TAP5-1257] - Javascript error with IE Prototype still in 1.7 Any confirmation from the dev team as to the right version to use to fix the zone update bug (see link) in IE9 much appreciated. http://tapestry.1045711.n5.nabble.com/Re-Prototype-IE9-update-td4331824.html On Wed, 2011-08-24 at 13:53 +0100, Joel Halbert wrote: Would be good if that's the case, I'll try it out. Since it wasn't listed as a bug fix I presumed it was not included. Presumably Tap's not counting it as a bug since it's in the js libs? On Wed, 2011-08-24 at 14:50 +0200, Chris Poulsen wrote: Hi, I haven't been following this closely, but are you sure that the most recent 5.2 build (5.2.6) does not contain what you need? It has some updates to the js libs as far as i can tell from the release notes? http://tapestry.apache.org/release-notes-52.html#ReleaseNotes5.2-ReleaseNotes%253ATapestry5.2.6 - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: Ajax callback for checkbox component?
OK np. Thanks Thiago! On Sun, 2011-07-03 at 19:53 -0300, Thiago H. de Paula Figueiredo wrote: On Sun, 03 Jul 2011 14:54:22 -0300, Joel Halbert j...@su3analytics.com wrote: Hi Folks, Hi! Is there an equivalent callback for a checkbox? Not out-of-the-box, but you can use a little bit of custom JavaScript plus a custom event (URL created by ComponentResources.createEventLink()) for that. - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Ajax callback for checkbox component?
Hi Folks, You can register for an ajax callback from select components like so: page.tml: t:select t:id=name value=name model=nameModel blankOption=NEVER t:zone=buttonZone / Page.java: Object onValueChangedFromName(String name) { // update zone } Is there an equivalent callback for a checkbox? Thanks! Joel
Access component via http request
Hi, Is it possible to invoke a component directly via HTTP? E.g given a Tapestry Page: public class MyPage { Object onMyRequest() { return something; } } I can call http://myapp/mypage:myrequest/ to return something. Can I do the same for a component? Cheers, Joel - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: Access component via http request
Can I access a component out of the context of a page? i.e. does a component have to be bound to a Page to be rendered? I'm trying render a simple html template and fetch it from my JS. On Thu, 2011-06-30 at 17:38 -0300, Thiago H. de Paula Figueiredo wrote: On Thu, 30 Jun 2011 17:26:35 -0300, Joel Halbert j...@su3analytics.com wrote: Hi, Hi! Is it possible to invoke a component directly via HTTP? E.g given a Tapestry Page: public class MyPage { Object onMyRequest() { return something; } } I can call http://myapp/mypage:myrequest/ to return something. Can I do the same for a component? It's not recommended to access components directly, but you can @Inject ComponentResources and use its createEventLink() method. - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: Access component via http request
hmm, how about using the tapx TemplateAPI and TemplateRenderer within a tapestry app? I don't need to do anything fancy like Page rendering, and infact am just using a Page instance as useful hook for ajax methods. From this method I just want to return some html rendered with tml, using tap's templating expression language. I've used tapx TemplateRenderer before with success, for sending HTML emails. Was hoping to do something similar now, although having tried it I get the following error: TemplateAPI templateAPI = new TemplateAPI(mypackage.web, new File(/web/components)); TemplateRenderer renderer = templateAPI.createRenderer(Tiles, en, default); RenderedStream renderedStream = renderer.render(); throws: Caused by: java.lang.IllegalArgumentException: Location 'default' is not defined. Defined location names: (none). Any clues as to how to fix that error? On Thu, 2011-06-30 at 14:07 -0700, Howard Lewis Ship wrote: You can ask any component to generate an event request Link using its component resources. In Tapestry, you don't try to second guess, on the client side, what links will look like ... you ask the server side to generate a link, and then your JavaScript code can send Ajax requests to that component. In terms of what you are trying to do ... Tapestry assumes most requests from the client will generate a partial page render response ... a particular format JSON response that contains HTML plus details about JavaScript libraries and initializations. In any case, that's what a Zone (or anything Zone-like) needs. If you can, use Zone. Alternately, a component may send a response directly back to the client, which it be text, HTML, JSON, or something binary. On Thu, Jun 30, 2011 at 1:55 PM, Joel Halbert j...@su3analytics.com wrote: Can I access a component out of the context of a page? i.e. does a component have to be bound to a Page to be rendered? I'm trying render a simple html template and fetch it from my JS. On Thu, 2011-06-30 at 17:38 -0300, Thiago H. de Paula Figueiredo wrote: On Thu, 30 Jun 2011 17:26:35 -0300, Joel Halbert j...@su3analytics.com wrote: Hi, Hi! Is it possible to invoke a component directly via HTTP? E.g given a Tapestry Page: public class MyPage { Object onMyRequest() { return something; } } I can call http://myapp/mypage:myrequest/ to return something. Can I do the same for a component? It's not recommended to access components directly, but you can @Inject ComponentResources and use its createEventLink() method. - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: Access component via http request
Good question, my rational was that I *might want need to re-use the template I'm creating inside a Tap Page soon, so I thought I would start off by making the html I need to render a Component (as I could access and render a component directly via an http request). I could always embed the Component within an empty wrapper Page and access that via http, but I was hoping this wouldn't be necessary. On Thu, 2011-06-30 at 23:11 +0200, Markus Feindler wrote: Then, why don't you use a page at all? Can I access a component out of the context of a page? i.e. does a component have to be bound to a Page to be rendered? I'm trying render a simple html template and fetch it from my JS. On Thu, 2011-06-30 at 17:38 -0300, Thiago H. de Paula Figueiredo wrote: On Thu, 30 Jun 2011 17:26:35 -0300, Joel Halbertj...@su3analytics.com wrote: Hi, Hi! Is it possible to invoke a component directly via HTTP? E.g given a Tapestry Page: public class MyPage { Object onMyRequest() { return something; } } I can call http://myapp/mypage:myrequest/ to return something. Can I do the same for a component? It's not recommended to access components directly, but you can @Inject ComponentResources and use its createEventLink() method. - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: Method arguments in template expansions
Cool, it works! I had tried it, but forgotten that method names are not shortened, so as Robert suggested you have to use the full method name: ${getFoo('bar')} works. ${foo('bar')} does not. On Sun, 2011-06-26 at 01:53 +0200, Martin Strand wrote: Just remember that method names are not shortened in the same way property names are. i.e. invoking this method: public String getClass(String link) would look like: ${getClass('link1')} On Sun, 26 Jun 2011 01:33:39 +0200, Robert Zeigler robert.zeig...@roxanemy.com wrote: Have you tried? :) ${} is using the property expression language under the hood, which /does/ support method evaluation/method arguments, so I would expect ${class('link1')} to work... but i haven't tried it, either. :) Robert On Jun 25, 2011, at 6/256:31 PM , Joel Halbert wrote: I'm pretty sure the answer's NO, but just incase I'll ask anyway. Is it possible to include method arguments in template expansions? I would die to be able to just do this: a href=link1 class=${class('link1')}link1/a a href=link2 class=${class('link2')}link2/a a href=link3 class=${class('link3')}link3/a - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Method arguments in template expansions
I'm pretty sure the answer's NO, but just incase I'll ask anyway. Is it possible to include method arguments in template expansions? I would die to be able to just do this: a href=link1 class=${class('link1')}link1/a a href=link2 class=${class('link2')}link2/a a href=link3 class=${class('link3')}link3/a Cheers, Joel - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: Live class reloading very slow
Hi Davor, Have you tried running Jetty standalone, out of eclipse? This is what we do. I'm not sure it has anything to do with your problem but it might be worth a try. It's only a few lines of code to write a simple Jetty server launcher as you can see http://pastebin.com/WsEFi2yh Just write a simple script to run for this class and even though you'll be using Jetty outside of eclipse you can still make code changes in eclipse and it will reload them dynamically (as long as you set your classpath for the jetty startup script correctly). - J On Wed, 2011-05-25 at 10:17 +0200, Davor Hrg wrote: Hi, your suggestion did improve reload when only template is changed. Still 6 seconds reload happens when I change page class. Hope this is also abnormal and someone has some suggestions how to fix it as well. to clarify : adding exclude ** for resources will stop eclipse from doing anything there, and this was wrong until I restored defaults for m2eclipse. by doing this maven added it's own resource processing to the build. After that templates get copied as soon as edited, Unlike with eclipse builder page reload is very fast 200ms for a page that reloaded 6 seconds before the changes were made. Davor Hrg On Tue, May 24, 2011 at 7:49 PM, Bryan Lewis jbryanle...@gmail.com wrote: I put it back into the src/main/resources line of .classpath, like: classpathentry excluding=** kind=src output=target/classes path=src/main/resources/ My templates are being copied to the expected place, like ... target\classes\com\companyname\appname\pages\PageName.tml. Maybe there's something else amiss with your maven/build configuration. Does your pom.xml have the resources section? Maybe compare your configuration with a small new one like the Tapestry quickstart. On Tue, May 24, 2011 at 1:37 PM, Davor Hrg hrgda...@gmail.com wrote: I also removed excluding ** for src/main/resurces but without it templates do not get copied to calsses dir where did you put back the excluding ** ? Davor Hrg - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
A new T5 site! www.bookmarkerpro.com
Hi Folks, We've just released (another) Tapestry5 based site! www.bookmarkerpro.com This one's a bookmarking app, as the name suggests. Features include: * Search the content of your bookmarks: page content, title url * Monitor your bookmarked pages, or even just part(s) of each page * Alerts (including optional email) when content you are monitoring changes * Import bookmarks from your browser. Export at any time. * One click search of your bookmarks from your browsers * Page archival and page change history We'll also be integrating with Readability in the near future, for sending bookmarked pages to kindle/ipad/iphone for offline viewing. The front end is wordpress (yawn) buy the back-end is all T5 (yay!) goodness . If you'd like to try it out you can sign up in less than 10 seconds, all you need is an email/password. We'd love to get your feedback. http://www.bookmarkerpro.com/beta-trial Once again, thanks to everyone on the mailing list for any help, and to the core T5 developers! Joel (p.s. Thiago - should be OK in Opera too, but let me know if not!)
Re: A new T5 site! www.bookmarkerpro.com
The front of site www.bookmarkerpro.com is wordpress, but this is only a few pages. ALL of the backend, on the app sub-domain, app.bookmarkerpro.com is T5. It also integrates with Lucene, HBase, OpenJPA our crawler. If you want to have a play you just need an email/passwd to register. On Tue, 2011-05-24 at 08:53 -0700, Howard Lewis Ship wrote: How far do you have to get into it to see the T5 part ... or are you just using tapestry-ioc for back end processing? Just curious. On Tue, May 24, 2011 at 7:34 AM, Joel Halbert j...@su3analytics.com wrote: Hi Folks, We've just released (another) Tapestry5 based site! www.bookmarkerpro.com This one's a bookmarking app, as the name suggests. Features include: * Search the content of your bookmarks: page content, title url * Monitor your bookmarked pages, or even just part(s) of each page * Alerts (including optional email) when content you are monitoring changes * Import bookmarks from your browser. Export at any time. * One click search of your bookmarks from your browsers * Page archival and page change history We'll also be integrating with Readability in the near future, for sending bookmarked pages to kindle/ipad/iphone for offline viewing. The front end is wordpress (yawn) buy the back-end is all T5 (yay!) goodness . If you'd like to try it out you can sign up in less than 10 seconds, all you need is an email/password. We'd love to get your feedback. http://www.bookmarkerpro.com/beta-trial Once again, thanks to everyone on the mailing list for any help, and to the core T5 developers! Joel (p.s. Thiago - should be OK in Opera too, but let me know if not!) - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: Live class reloading very slow
Hi Davor, I use a similar spec. Should take a second or two. - Joel On Tue, 2011-05-24 at 18:10 +0200, Davor Hrg wrote: ok, we are on 5.2.4 now, I am running it from eclipse using run-jetty-run 1.1.1 I'll try newer jetty plugin 1.2.2.1 how long should I expect a page reload to last for: - page - editing component inside - two forms in the component - maybe 20 form fields total Quad core intel Core i7 4GB RAM Davor Hrg On Tue, May 24, 2011 at 5:50 PM, Howard Lewis Ship hls...@gmail.com wrote: For me as well, instantaneous under Jetty. 5.2.5 adds field write-behind when in development mode, to assist with debugging. This is also present in 5.3. There is a switch to use the page pool, please chck the documentation (configuration page). On Tue, May 24, 2011 at 8:37 AM, Davor Hrg hrgda...@gmail.com wrote: Hi, I may be wrong but since T5 5.2+ live class reloading is much slower. I remember it being faster before for a page with maybe 10-20 components reload lasts for 5-10 seconds. it becomes worse with each component added. This is far from productive and far from advertised by the framework. It feels like going back to stone age of JSP and restarting whole server for simple change. We have been using tapestry since the beginning of T5, and a bit T4, I could swear it was not this horribly slow before. Another thing is the new handling of variables and page pool. it is awful for debugging... is there a switch to use old page pool ? Davor Hrg -- Howard M. Lewis Ship Creator of Apache Tapestry The source for Tapestry training, mentoring and support. Contact me to learn how I can get you up and productive in Tapestry fast! (971) 678-5210 http://howardlewisship.com - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
page automatically scrolling to component on load
Hi, We've got a upload file form using the Upload component: t:form t:errors/ input t:type=upload t:id=file t:validate=required/ input type=submit value=Import/ /t:form This is all located towards the bottom of the page and I've noticed that when the page first loads it scrolls down to this field, in all browsers. Could this be because it's trying to render an error message, even though there is none? - Joel - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: page automatically scrolling to component on load
Worked a treat, thanks. On Sat, 2011-05-21 at 09:13 -0400, Bryan Lewis wrote: Tapestry automatically puts the focus into the first field of the page unless you tell it not to. Try adding the 'autofocus' attribute to the form declaration: t:form ... autofocus=false On Sat, May 21, 2011 at 5:53 AM, Joel Halbert j...@su3analytics.com wrote: Hi, We've got a upload file form using the Upload component: t:form t:errors/ input t:type=upload t:id=file t:validate=required/ input type=submit value=Import/ /t:form This is all located towards the bottom of the page and I've noticed that when the page first loads it scrolls down to this field, in all browsers. Could this be because it's trying to render an error message, even though there is none? - Joel - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
New Tapestry website - webalertpro.com
Hi Folks, Is anyone in charge of vetoing/adding websites to the the Tapestry Applications page? http://tapestry.apache.org/applications.html We'd be honoured to join the roll call of websites with our latest Tapestry based product, WebAlertPro The front of house is actually wordpress: http://www.webalertpro.com But the meat of the site is all in Tapestry: http://app.webalertpro.com Comments, feedback and willing beta users are all welcome! And - thanks to everyone on the Tapestry mailing list for helping us out when we were in trouble! Regards, Joel - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: The right way to manually update a zone in tapestry
OK figured it out... Trick is to use the ZoneManager for the zone id (see Tapestry.js) : So this ajax request, to update a zone, works, and all the tap js callbacks on components are registered correctly var zoneManager = Tapestry.findZoneManagerForZone('my-zone-id'); $.get(/home.alerts:blockPath, {url:ignore_url, fullurl:fullurl, ccid:ccid, area:ignore_isarea, title:title,block:block}, function(responseJSON) { zoneManager.processReply(responseJSON); }); On Tue, 2011-04-05 at 14:30 +0100, Support WebAlertPro wrote: Hi, I am calling a Tapestry action link manually from js, it's an ajax call that returns a zone. I then swap out the old zone for the new zone html. This all works well, except for that fact that any Tapestry js callbacks that would normally be triggered when the zone loads on the page (i.e. if this was all done Tap via an action link zone update) are not called, resulting in actionlinks within the zone that do not work as expected. Is there a correct way to swap out a zone on a page manually using js, possibly calling one of the Tapestry.js functions? Joel
Re: dynamically changing event link context on client side using js
Hi Thiago, Using this approach, if I was to invoke this ajax URL I'd have to process the zone response myself manually. What I'd like to be able to do is update the context or params on an event link so that when the clicks on it the response and corresponding zone update is automatically taken care of. Now, I can update the context or request params on the client side, but it seems like these updates are ignored For example: If I have an tapestry event link on the page which generates the following html: a id=ignore2 onclick=javascript:return Tapestry.waitForPage(event); href=/home.alerts:ignore2mylink/a I can update the href using js to add a request parameter: a id=ignore2 onclick=javascript:return Tapestry.waitForPage(event); href=/home.alerts:ignore2?param=valuemylink/a or add a context: a id=ignore2 onclick=javascript:return Tapestry.waitForPage(event); href=/home.alerts:ignore2/valuemylink/a but what is submitted to the server when the link is selected is always the original url: /home.alerts:ignore2 there seems to be no simple way around this?! - Joel On Mon, 2011-03-28 at 19:30 -0300, Thiago H. de Paula Figueiredo wrote: On Mon, 28 Mar 2011 19:10:00 -0300, Joel Halbert j...@su3analytics.com wrote: I need a way of submitting the dynamic content back to the server as part of an ajax request I'm not clear how I would be able to do this in the manner you suggest. Define an event name, @Inject ComponentResources and use its createEventLink() method. It returns a Link. To get an absolute URL out of it, invoke its toAbsoluteURI() method. Now just pass this URL to your AJAX code, most probably using JavascriptSupport.addScript(). Add your data as query parameters.
dynamically changing event link context on client side using js
Hi, I have a typical ajax event link e.g. a t:type=eventlink t:id=ignore zone=resultsZone I want to be able to update the context on the clientside using javascript, dynamically. (or alternatively attach a request parameter and have this submitted with the link). What's the easiest way to accomplish this? I can modify the link to change the url to append my context (or request parameter) but it seems these post page-load modifications to the anchor href are ignored when the links is submitted. Thanks, Joel
Re: dynamically changing event link context on client side using js
Hi Mark, I need a way of submitting the dynamic content back to the server as part of an ajax request I'm not clear how I would be able to do this in the manner you suggest. - Joel On Mon, 2011-03-28 at 15:43 -0500, Mark wrote: Normally the context is going to be used to figure out the state when the link was rendered. This is particularly useful in a loop were you need to figure out which eventlink was actually clicked. It sounds like you want to make the eventlink do different things based on some type of ajax event on another part of the page. If that is what you are trying to do, are you sure you even need to use an eventlink context? Can you just have the other Ajax event update a persistent variable on the page and read it (instead of the context) when the eventlink is triggered? Mark On Mon, Mar 28, 2011 at 1:46 PM, Joel Halbert j...@su3analytics.com wrote: Hi, I have a typical ajax event link e.g. a t:type=eventlink t:id=ignore zone=resultsZone I want to be able to update the context on the clientside using javascript, dynamically. (or alternatively attach a request parameter and have this submitted with the link). What's the easiest way to accomplish this? I can modify the link to change the url to append my context (or request parameter) but it seems these post page-load modifications to the anchor href are ignored when the links is submitted. Thanks, Joel - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: 10 Minute Web Application Demo
This is a Great Idea Mark. However, I'm on Ubuntu 10.10 (Chromium 9.0.597.94 (73967) Ubuntu 10.10), and the video plays but the screen it black. BUT when you pause and restart it it suddenly plays perfectly, and I can see the video! (same thing happens in FF 3.6.13) On Tue, 2011-02-15 at 16:20 +0100, Vangel V. Ajanovski wrote: I have Ubuntu 10.10 and have lateset Adobe Flash 10.2.152.27 in Firefox nightly beta. I can see the static preview but once I click play I have no video - static black, and HAVE audio. Flash demo on http://www.adobe.com/products/flashplayer/ works without a flaw. On 15.02.2011 14:06, Alex Kotchnev wrote: Mark, this probably has to do with how the flash movie is encoded but it isn't viewable on Linux (Fedora 12). For a reference point, I never have issues viewing flash movies from YouTube and such (this is probably the first time - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: Discussion- the verdict
Yes, it's a pity that someone might be put off using the framework because of vocal, and misinformed minority. There's really no substitute for trying something yourself... On Wed, 2011-01-12 at 09:50 -0200, Thiago H. de Paula Figueiredo wrote: On Wed, 12 Jan 2011 08:53:41 -0200, George Banus georgeba...@gmail.com wrote: Hi Guys, Hi! So, I'm sorry I have to say that I'm saving my time and effort in learning Tapestry for something else. This is my decision for now, though I might change it in 3 or 4 years time after I notice some stability and consistencies in Tapestry releases. Please check the stability and consistency of all releases since Tapestry 5.1, the first T5 stable release. And don't believe everything you read on in the Internet. ;) - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: Opportunity for some PR?
+1 On Mon, 2011-01-10 at 11:36 -0800, Josh Canfield wrote: I love working in Tapestry and there is some truth in what the person has to say. I believe in the Tapestry5 framework but I also know there is a long way we need to go to distance ourselves from the pain that people experienced when Tap3/4 stopped getting Howard's attention. The choice of calling the framework Tapestry 5 came with it's benefits and it's harm. Obviously people know the name Tapestry because it's been around for a long time. But with that longevity brings a host of people with a bad experience in any previous version who can denigrate the current framework armed with all the ammo of past mistakes. The recent documentation effort has been amazing. If you can't write (me) and you want to help push the project forward, maybe we can get an effort going to clean up the defect database? I'd like to work on the issues that will help the most people. Picking what to work on next can be a challenge so, please vote up issues in the defect system that you care about, they will get more attention. Add comments to defects that give helpful information about how you are experiencing the defect, what you are trying to do and what is happening especially if it's different from the submitter. The less time any of the committers have to spend figuring out what the defect means or how to reproduce the more time can be spent making appropriate changes :) Anyway, here's to continuing to build out a solid framework that best suits our mental model, even if some portion of population never gets it! Josh On Mon, Jan 10, 2011 at 10:02 AM, Thiago H. de Paula Figueiredo thiag...@gmail.com wrote: On Mon, 10 Jan 2011 14:46:58 -0200, jackkuros...@w9z.org wrote: Just posted: http://stackoverflow.com/questions/4638851/what-java-web-application-framework-to-use If you look at the things tagged Tapestry there are quite a few opportunities to help clear up some misconceptions about Tapestry. It looks like there are two people who heavily use the StackOverFlow to spread mis-information about the framework. SO could benefit from some more voices and votes from people who are actually using Tapestry. http://stackoverflow.com/questions/tagged/tapestry And there's this: http://stackoverflow.com/questions/1303438/why-did-you-stop-using-tapestry. What about downvoting the first answer? It's mostly about Tapestry 4 and he calls Howard a liar. Classy. I wrote an answer to it. It's the third most voted one until now, but with way less votes than the first. -- Thiago H. de Paula Figueiredo Independent Java, Apache Tapestry 5 and Hibernate consultant, developer, and instructor Owner, Ars Machina Tecnologia da Informação Ltda. http://www.arsmachina.com.br - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: tapestry ioc
Actually - it all stemmed from me just wanting to exclude the SpringModule when using the tapx templating library for sending html emails! Since that's a standalone app that just uses tapx tap-ioc (no web component) it just got me thinking about using Tap-IOC for my other standalone, non Tapestry5 web based, projects (hence all the questons!). On Thu, 2011-01-06 at 15:23 -0800, Josh Canfield wrote: Again, it doesn't seem right to have to consider what are effectively runtime deployment configuration options when building an application into a jar. This is funny because I thought that is exactly what you are trying to do. If you are going to exclude modules from a deployment but don't want to do it from system properties, then you must be creating an app module that uses your multi-module jar? If that's the case then you can define your dependencies using the @SubModule annotation on your deployed AppModule. If all of your included modules also define their dependencies this way then you don't have to worry about extra's getting loaded, just don't use the Manifest auto-loading. I prefer this method because it also documents your dependencies. If you are putting third party modules that use the auto-loading into your classpath... then just don't do that. Josh On Thu, Jan 6, 2011 at 8:37 AM, Joel Halbert j...@su3analytics.com wrote: - if you have lots of modules, which a client may want to selectively enable, do not declare them in the manifest, but instead let the client use the tapestry.modules sys property to selectively enabl But that's sort of my point - configuring IOC via a system property doesn't seem right, especially if all I wanted to do was disable 1 of many services. This looks like a huge JAR. Why not break it in smaller, more manageable ones? Again, it doesn't seem right to have to consider what are effectively runtime deployment configuration options when building an application into a jar. On Thu, 2011-01-06 at 14:15 -0200, Thiago H. de Paula Figueiredo wrote: On Thu, 06 Jan 2011 14:09:02 -0200, Joel Halbert j...@su3analytics.com wrote: So if I understand correctly: - the only way to disable modules that are specified in the manifest is to remove the jar from the classpath Wrong. See http://tapestry.1045711.n5.nabble.com/T5-disable-loading-specified-module-td2431110.html - if you have lots of modules, which a client may want to selectively enable, do not declare them in the manifest, but instead let the client use the tapestry.modules sys property to selectively enable them This looks like a huge JAR. Why not break it in smaller, more manageable ones? You can also use @SubModule in a module class to include other modules automatically without using system properties or context parameters. - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: tapestry ioc
I haven't used this library yet, so I don't know if it needs SpringModule or not. I guess it does, as Howard wrotes it and SpringModule is there. But that's just a guess. :) No, it doesn't use it, it just happened to be in my classpath. On Fri, 2011-01-07 at 09:08 -0200, Thiago H. de Paula Figueiredo wrote: On Fri, 07 Jan 2011 07:46:39 -0200, Joel Halbert j...@su3analytics.com wrote: Actually - it all stemmed from me just wanting to exclude the SpringModule when using the tapx templating library for sending html emails! I haven't used this library yet, so I don't know if it needs SpringModule or not. I guess it does, as Howard wrotes it and SpringModule is there. But that's just a guess. :) Since that's a standalone app that just uses tapx tap-ioc (no web component) it just got me thinking about using Tap-IOC for my other standalone, non Tapestry5 web based, projects (hence all the questons!). I use Tapestry-IoC for non-web projects too. :) - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
tapestry ioc
As I understand it Tapestry-IOC will autoload any modules that it finds. http://tapestry.apache.org/autoloading-modules.html Is there a way to explicitly disable the loading of certain modules, other than removing the jar in which the module is packaged from the classpath? - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: tapestry ioc
why cant you take the jar from the classpath? This is what I have done, but it strikes me as quite a blunt instrument to use for configuring an application. Does it really mean you need a jar per service, if the user of the jar might want to selectively enable some of the services but not others? On Thu, 2011-01-06 at 06:56 -0800, Josh Canfield wrote: That quote doesn't help because its in the manifest of the jar you want to exclude... why cant you take the jar from the classpath? On Jan 6, 2011 6:53 AM, Josh Canfield joshcanfi...@gmail.com wrote: From the link; Module autoloading isn't 100% free ... you must tell Tapestry IoC where the modules to load are located, which can be done via a Manifest file entry, or via an annotation. I don't believe being in the classpath is enough. I'm not sure there is a way to prevent a dependent module from loading. On Jan 6, 2011 3:54 AM, Joel Halbert j...@su3analytics.com wrote: As I understand it Tapestry-IOC will autoload any modules that it finds. http://tapestry.apache.org/autoloading-modules.html Is there a way to explicitly disable the loading of certain modules, other than removing the jar in which the module is packaged from the classpath? - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: tapestry ioc
So if I understand correctly: - the only way to disable modules that are specified in the manifest is to remove the jar from the classpath - if you have lots of modules, which a client may want to selectively enable, do not declare them in the manifest, but instead let the client use the tapestry.modules sys property to selectively enable them These both seem like pretty blunt options, and would discourage me from using tap-ioc as a standalone framework for runtime configuration. On Thu, 2011-01-06 at 07:46 -0800, Josh Canfield wrote: If you provide a jar with 100 modules that can be enabled/disabled then don't provide the manifest entry and resort to providing modules via tapestry.modules system property... Searching the mailing list archives I've found this thread with a solution for disabling the autoloading of given modules: http://tapestry.1045711.n5.nabble.com/T5-disable-loading-specified-module-td2431110.html This solution doesn't look like it will work in the current codebase. If you disable default modules (via the MANIFEST) you are also disabling tapestry.modules (see line 138 of TapestryAppInitializer and line 80 of IOCUtilities). That seems like a defect to me, and probably got in as part of a refactoring. There is a context parameter that you can use to add modules after you've disabled auto loading. tapestry.MODE-modules, where mode is defined by the system property tapestry.execution-mode (defaults to production) I don't think I've ever seen this documented, or felt the need to use it. Josh On Thu, Jan 6, 2011 at 7:23 AM, Thiago H. de Paula Figueiredo thiag...@gmail.com wrote: On Thu, 06 Jan 2011 13:07:34 -0200, Joel Halbert j...@su3analytics.com wrote: why cant you take the jar from the classpath? This is what I have done, but it strikes me as quite a blunt instrument to use for configuring an application. Does it really mean you need a jar per service, if the user of the jar might want to selectively enable some of the services but not others? One JAR can have as many modules as you want, so you don't need one JAR per service. And Tapestry-IoC doesn't offer any way of selectively enable or disable services provided by a module. IMHO I don't miss this feature at all. Searching the mailing list archives I've found this thread with a solution for disabling the autoloading of given modules: http://tapestry.1045711.n5.nabble.com/T5-disable-loading-specified-module-td2431110.html -- Thiago H. de Paula Figueiredo Independent Java, Apache Tapestry 5 and Hibernate consultant, developer, and instructor Owner, Ars Machina Tecnologia da Informação Ltda. http://www.arsmachina.com.br - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: tapestry ioc
- if you have lots of modules, which a client may want to selectively enable, do not declare them in the manifest, but instead let the client use the tapestry.modules sys property to selectively enabl But that's sort of my point - configuring IOC via a system property doesn't seem right, especially if all I wanted to do was disable 1 of many services. This looks like a huge JAR. Why not break it in smaller, more manageable ones? Again, it doesn't seem right to have to consider what are effectively runtime deployment configuration options when building an application into a jar. On Thu, 2011-01-06 at 14:15 -0200, Thiago H. de Paula Figueiredo wrote: On Thu, 06 Jan 2011 14:09:02 -0200, Joel Halbert j...@su3analytics.com wrote: So if I understand correctly: - the only way to disable modules that are specified in the manifest is to remove the jar from the classpath Wrong. See http://tapestry.1045711.n5.nabble.com/T5-disable-loading-specified-module-td2431110.html - if you have lots of modules, which a client may want to selectively enable, do not declare them in the manifest, but instead let the client use the tapestry.modules sys property to selectively enable them This looks like a huge JAR. Why not break it in smaller, more manageable ones? You can also use @SubModule in a module class to include other modules automatically without using system properties or context parameters. - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: No service implements the interface org.springframework.context.ApplicationContext.
I've managed to get a little further with this by defining a service builder method for ApplicationContext in: com.howardlewisship.tapx.templating.services.TemplateModule like this: public static ApplicationContext build() { TapestryApplicationContext tac = new TapestryApplicationContext(); tac.refresh(); return tac; } which fixes the original exception in my previous email, but introduces a new set of exceptions, as I'm obviously not correctly wiring up the TapestryApplicationContext service. Caused by: java.lang.NullPointerException at org.apache.tapestry5.spring.TapestryApplicationContext.createBeanFactory(TapestryApplicationContext.java:34) at org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.java:121) Any idea how to wire up TapestryApplicationContext properly? Also - why is it trying to initialise a Spring ApplicationContext service? Surely the tapx examples just use Tap IOC, where did the dependency on Spring's ApplicationContext come from? J On Tue, 2011-01-04 at 14:15 +, Joel Halbert wrote: Hi Happy New Year, I'm trying to replicate the following example, to generate an HTML email using the tapestry tapx Template extension. https://github.com/hlship/tapx/blob/master/tapx-templating/src/test/java/com/howardlewisship/tapx/templating/integration/SendMail.java When I run the example I get the following error: Caused by: java.lang.RuntimeException: No service implements the interface org.springframework.context.ApplicationContext. at org.apache.tapestry5.ioc.internal.RegistryImpl.getService(RegistryImpl.java:560) at org.apache.tapestry5.ioc.internal.ObjectLocatorImpl.getService(ObjectLocatorImpl.java:44) All the tapestry-* jars, including tapestry-spring-5.1.05.jar are in my classpath. Any clues as to what I'm missing? Thanks, Joel - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: No service implements the interface org.springframework.context.ApplicationContext.
OK, figured it out. I didn't realise that TapIOC loads ANY modules that it finds (in the classpath). Removing the tapestry-spring.jar fixed the problem. Is there a way to explicitly prevent TapIOC loading a module, so that I can continue to have SpringModule on the classpath, but without it being loaded? On Wed, 2011-01-05 at 11:31 +, Joel Halbert wrote: I've managed to get a little further with this by defining a service builder method for ApplicationContext in: com.howardlewisship.tapx.templating.services.TemplateModule like this: public static ApplicationContext build() { TapestryApplicationContext tac = new TapestryApplicationContext(); tac.refresh(); return tac; } which fixes the original exception in my previous email, but introduces a new set of exceptions, as I'm obviously not correctly wiring up the TapestryApplicationContext service. Caused by: java.lang.NullPointerException at org.apache.tapestry5.spring.TapestryApplicationContext.createBeanFactory(TapestryApplicationContext.java:34) at org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.java:121) Any idea how to wire up TapestryApplicationContext properly? Also - why is it trying to initialise a Spring ApplicationContext service? Surely the tapx examples just use Tap IOC, where did the dependency on Spring's ApplicationContext come from? J On Tue, 2011-01-04 at 14:15 +, Joel Halbert wrote: Hi Happy New Year, I'm trying to replicate the following example, to generate an HTML email using the tapestry tapx Template extension. https://github.com/hlship/tapx/blob/master/tapx-templating/src/test/java/com/howardlewisship/tapx/templating/integration/SendMail.java When I run the example I get the following error: Caused by: java.lang.RuntimeException: No service implements the interface org.springframework.context.ApplicationContext. at org.apache.tapestry5.ioc.internal.RegistryImpl.getService(RegistryImpl.java:560) at org.apache.tapestry5.ioc.internal.ObjectLocatorImpl.getService(ObjectLocatorImpl.java:44) All the tapestry-* jars, including tapestry-spring-5.1.05.jar are in my classpath. Any clues as to what I'm missing? Thanks, Joel - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
No service implements the interface org.springframework.context.ApplicationContext.
Hi Happy New Year, I'm trying to replicate the following example, to generate an HTML email using the tapestry tapx Template extension. https://github.com/hlship/tapx/blob/master/tapx-templating/src/test/java/com/howardlewisship/tapx/templating/integration/SendMail.java When I run the example I get the following error: Caused by: java.lang.RuntimeException: No service implements the interface org.springframework.context.ApplicationContext. at org.apache.tapestry5.ioc.internal.RegistryImpl.getService(RegistryImpl.java:560) at org.apache.tapestry5.ioc.internal.ObjectLocatorImpl.getService(ObjectLocatorImpl.java:44) All the tapestry-* jars, including tapestry-spring-5.1.05.jar are in my classpath. Any clues as to what I'm missing? Thanks, Joel - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: It's payback time!
done. On Sat, 2010-12-18 at 13:00 +0100, Christian Riedel wrote: I voted for you :-) Am 18.12.2010 um 12:44 schrieb Antonio Fernández: Hi Howard ! My short comment is already posted. ;-) Best Regards, Antonio El 17/12/2010 23:39, Howard Lewis Ship escribió: As you are all aware, Tapestry is an open source project, a labor of love for the committers. The Tapestry committers and contributors work quite hard to create the code, fix the bugs, add new features, write documentation, and provide free support on the mailing list. It's not easy, and you'd be amazed at just how much work it can be. What we ask in return is simple: a little bit of support in exchange for our efforts. That can take many forms; one opportunity is right here on JavaLobby in a thread discussing the new 5.2 release: http://java.dzone.com/articles/announcing-tapestry-52 If you value Tapestry and the vast amount of time and effort the Tapestry team has provided to you, then you should take a few minutes to write a short comment in the discussion thread about why you like Tapestry. Please try to do so briefly, concretely, and without bashing other frameworks. Good grammar helps as well -- Antonio Miguel Fernández Rodríguez Jaraxa Software, SL Software analyst www.jaraxa.com - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: Customising T5 URL Encoding
Makes sense. I must admit I was curious as to why T5 uses custom encoding, so thanks for the explanation. I'll use Nicolas's solution to override this behaviour. On 19/06/10 01:20, Howard Lewis Ship wrote: Tapestry does its own encoding because Jetty and Tomcat differ on whether you get the decoded or raw strings. Creating another option, that would work the same across servlet containers, seemed to make sense at the time. On Fri, Jun 18, 2010 at 8:50 AM, Nicolas Bouillonnico...@bouil.org wrote: Hi, Here is how i've overrided this behavior, to allow URL with %20 or other chars as incomming request. It quite a copy/paste tweaking of the original UrlEncoderImpl from Tapestry 5.1.0.5. public class AppModule { . public static void contributeServiceOverride( MappedConfigurationClass, Object configuration) { configuration.add(URLEncoder.class, new MyURLEncoderImpl()); } . } package org.bouil.tapestry.services; import java.io.UnsupportedEncodingException; import java.util.BitSet; import org.apache.tapestry5.ioc.internal.util.Defense; import org.apache.tapestry5.services.URLEncoder; public class MyURLEncoderImpl implements URLEncoder { static final String ENCODED_NULL = $N; static final String ENCODED_BLANK = $B; /** * Bit set indicating which character are safe to pass through (when * encoding or decoding) as-is. All other characters are encoded as a kind * of unicode escape. */ private final BitSet safeForInput = new BitSet(128); private final BitSet safeForOutput = new BitSet(128); { markSafeForInput(aàâäbcçĉdeéèêëfgĝhĥiïîjĵklmnoôöpqrsŝtuùûüvwxyzæœ); markSafeForInput(AÀÂÄBCÇĈDEÉÈÊËFGĜHĤIÏÎĤJĴKLMNOÔÖPQRSŜTUÙÛÜVWXYZÆŒ); markSafeForInput(01234567890-_.:,'); markSafeForOuput(abcdefghijklmnopqrstuvwxyz); markSafeForOuput(ABCDEFGHIJKLMNOPQRSTUVWXYZ); markSafeForOuput(01234567890-_.:,'); } private void markSafeForInput(String s) { for (char ch : s.toCharArray()) { safeForInput.set(ch); } } private void markSafeForOuput(String s) { for (char ch : s.toCharArray()) { safeForOutput.set(ch); } } public String encode(String input) { if (input == null) return ENCODED_NULL; if (input.equals()) return ENCODED_BLANK; boolean dirty = false; int length = input.length(); StringBuilder output = new StringBuilder(length * 2); for (int i = 0; i length; i++) { char ch = input.charAt(i); if (ch == '$') { output.append($$); dirty = true; continue; } int chAsInt = ch; if (safeForOutput.get(chAsInt)) { output.append(ch); continue; } try { return java.net.URLEncoder.encode(new String(input), UTF-8); } catch (UnsupportedEncodingException e) { throw new IllegalArgumentException(e); } // output.append(String.format($%04x, chAsInt)); // dirty = true; } return dirty ? output.toString() : input; } public String decode(String input) { Defense.notNull(input, input); if (input.equals(ENCODED_NULL)) return null; if (input.equals(ENCODED_BLANK)) return ; boolean dirty = false; int length = input.length(); StringBuilder output = new StringBuilder(length * 2); for (int i = 0; i length; i++) { char ch = input.charAt(i); if (ch == '$') { dirty = true; if (i + 1 length input.charAt(i + 1) == '$') { output.append('$'); i++; dirty = true; continue; } if (i + 4 length) { String hex = input.substring(i + 1, i + 5); try { int unicode = Integer.parseInt(hex, 16); output.append((char) unicode); i += 4; dirty = true; continue; } catch (NumberFormatException ex) { // Ignore. } } throw new IllegalArgumentException( String .format( Input string '%s' is not valid; the '$' character at position %d should be followed by another '$' or a four digit hex number (a unicode value)., input, i + 1)); } if (!safeForInput.get(ch)) { throw new IllegalArgumentException( String
Re: Page Navigation - Link vs Page when appending a query string to the result
Thanks, I was curious as to whether I could do what I need using Page, but in the meantime can get around it using Link. On 18/06/10 18:02, Howard Lewis Ship wrote: Currently, there isn't a good way to do what you want. I just hit a similar problem for my client and am deciding on the right solution; I think another callback event, much like passivate, but passed the Link so it can be customized. See https://issues.apache.org/jira/browse/TAP5-1190 On Fri, Jun 18, 2010 at 8:30 AM, Joel Halbertj...@su3analytics.com wrote: I want to return the user to a page that has a context and some query params: I can do this, using Link: public Object onSubmit(){ Link link = ls.createPageRenderLinkWithContext(Buy.class, product); link.addParameter(x, x); link.addParameter(y, y); return link; } Directs the user to; http://localhost:8080/web/buy/product?x=1y=2 I want to know if I can easily do the same using Page: @InjectPage private Buy buy; public Object onSubmit() { buy.setProduct(product) return buy; } And in Buy have an onPassivate to get the correct context Buy { String onPassivate90{return product} } Whch gets me the URL: http://localhost:8080/web/buy/product But what's the easiest way of then tacking on the query string I want? - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
t:loop - callbak before each iteration?
Hi, When using t:loop is there a method we can declare on the component that Tapestry will call before each iteration ? or is there another way to do this Joel
Re: Customising T5 URL Encoding
Agreed, it would be good to have this as a configuration option. On 20/06/10 19:20, Kai Weber wrote: * Nicolas Bouillonnico...@bouil.org: The Tapestry URL encoding is not a problem for me in general, just for one use case when i wanted to migrate a site to tapestry and keeping the same URL (with accents, spaces, dashes, underscores and so on). It is a problem if you get called by other webapps. If they call your page with the standard URL encoding scheme you have a problem. Say you have onActivate(String emailadress) no one can call your page because the expected encoding for @ in T5 is $0040 where the rest of the world would send you an @. We use only query strings or numerical IDs as parameters for pages which can get called from external sites. I would like to see configuration option to switch or disable the URLEncoder completly. Kai - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
URL encoding issue
Hi Folks, I have an onSubmit from which i return a URL, which all works fine, unless I have a path fragment with certain characters, such a spaces. So If I return a URL such as: http://localhost:8080/web/buy/sports tops I get: Input string 'sports tops' is not valid; the character ' ' at position 7 is not valid. From: org.apache.tapestry5.internal.services.URLEncoderImpl.decode(URLEncoderImpl.java:143) More suprisingly, If I URL encode the path using either + or %20 for spaces I get pretty the same e.g.: Input string 'sports+tops' is not valid; the character '+' at position 7 is not valid. From: org.apache.tapestry5.internal.services.URLEncoderImpl.decode(URLEncoderImpl.java:143) Any clues here? I'm using 5.1.0.5 Thx Joel
Re: URL encoding issue
As far as I understand though, I *could* return a URL, this is perfectly valid no? So I'm kind of curious as to why it doesn't work On 18/06/10 15:58, Christophe Cordenier wrote: Hi You'd better return a Link built via the LinkSource service. So Tapestry encode the event/page context for you. 2010/6/18 Joel Halbertj...@su3analytics.com Hi Folks, I have an onSubmit from which i return a URL, which all works fine, unless I have a path fragment with certain characters, such a spaces. So If I return a URL such as: http://localhost:8080/web/buy/sports tops I get: Input string 'sports tops' is not valid; the character ' ' at position 7 is not valid. From: org.apache.tapestry5.internal.services.URLEncoderImpl.decode(URLEncoderImpl.java:143) More suprisingly, If I URL encode the path using either + or %20 for spaces I get pretty the same e.g.: Input string 'sports+tops' is not valid; the character '+' at position 7 is not valid. From: org.apache.tapestry5.internal.services.URLEncoderImpl.decode(URLEncoderImpl.java:143) Any clues here? I'm using 5.1.0.5 Thx Joel - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Page Navigation - Link vs Page when appending a query string to the result
I want to return the user to a page that has a context and some query params: I can do this, using Link: public Object onSubmit(){ Link link = ls.createPageRenderLinkWithContext(Buy.class, product); link.addParameter(x, x); link.addParameter(y, y); return link; } Directs the user to; http://localhost:8080/web/buy/product?x=1y=2 I want to know if I can easily do the same using Page: @InjectPage private Buy buy; public Object onSubmit() { buy.setProduct(product) return buy; } And in Buy have an onPassivate to get the correct context Buy { String onPassivate90{return product} } Whch gets me the URL: http://localhost:8080/web/buy/product But what's the easiest way of then tacking on the query string I want?
AribaWeb
Any T5 users ever heard of AribaWeb. Any opinions of it? http://aribaweb.org/ I'm just curious, I'd never heard of it until today. - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: Add yourself to the Tapestry Users Map
Wow, there are a couple of people who must live in the arctic circle. -Original Message- From: Howard Lewis Ship hls...@gmail.com Reply-To: Tapestry users users@tapestry.apache.org To: Tapestry users users@tapestry.apache.org Subject: Add yourself to the Tapestry Users Map Date: Thu, 3 Sep 2009 10:03:57 -0700 I maintain a map of Google Map of Tapestry users: http://maps.google.com/maps/ms?ie=UTF8hl=enmsa=0msid=106662057515738259524.0004696f8216ba268b74az=3 It's fun an informative for me, and for others, to see where the Tapestry users are. For instance, I can see that Germany is a real hot-bed of Tapestry activity (a separate discussion would be why there as opposed to elsewhere?). Start by clicking the Edit button: map-edit.png Next, click the pushpin icon in the upper left corner of the map: map-toolbar.png Drag the push-pin to where you live: map-drop.png In the popup-bubble, set the Title to your name, add any extra details you like, and customize the push-pin icon if you like: map-details.png Click OK to dismiss the dialog, then click Done to save your new pushpin on the global map: map-done.png -- Howard M. Lewis Ship Creator of Apache Tapestry The source for Tapestry training, mentoring and support. Contact me to learn how I can get you up and productive in Tapestry fast! - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: lack of committers
Maybe there are so few committers because everyone is so busy being productive using this great framework to roll out loads of software? :-) -Original Message- From: Thiago H. de Paula Figueiredo thiag...@gmail.com Reply-To: Tapestry users users@tapestry.apache.org To: Tapestry users users@tapestry.apache.org Subject: Re: lack of committers Date: Mon, 22 Jun 2009 09:33:34 -0300 On Sat, Jun 20, 2009 at 9:07 AM, Ivano Lubertilube...@archicoop.it wrote: Howard, it seems to me that Tapestry has really few committers and is mainly driven by one man. It is a shame for a so beautiful piece of software. What is the reason ? Simply the typical lack of funding ? Or is a more or less choice made by you for whatever reason. I'm a commiter since February and wrote the URL rewriting support that Robert Zeigler improved (thanks Robert!). Unfortunately, that's the single contribution I've done so far (besides contributing some Brazilian Portuguese translations). This issue is more about open source development at large than Tapestry-specific: a few people are paid to work on projects (I wish I was one of them), but most work on their free time. Some projects have companies behind them (Hibernate, Spring, JBoss, etc), some of them quite big (IBM, Sun, etc). We all here should thank Formos for employing Howard, so he can spend a lot of his *work* time writing and improving Tapestry. There are many things I want to do, but I'm too busy now to do them. I can't speak for other committers, but I guess this happens to them too. My bigger plans are here: http://www.nabble.com/-VOTE--Thiago-H.-de-Paula-Figueiredo-as-Tapestry-Committer-td21917887i20.html#a22047791. - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: [Tapestry Central] Why chose Tapestry?
and Julie to share knowledge so that they can understand each other's code. Even if pairing occurs only part time, it's very effective at knowledge transfer as well as ordinary coding. The idea that mediocre developers should use JSF as it is more tolerant of errors is absurd! Tapestry 5 is designed to improve productivity for all developers, by streamlining, simplifying, being smart and being concise ... not to mention live class reloading and best-of-breed exception reporting, which makes it fast to identify and fix those errors. If your doctor tells you to eat less red meat, that doesn't mean you should switch to a diet of fried chicken three meals a day! Likewise, if you have concerns with code quality from your developers, you should not switch to a less agile, more code-intensive, less supportive development model and hope to catch all the bugs in QA. Sweeping problems under the rug is never a winning strategy. Coming down off my soap box, I should also add that Tapestry 5.1 works a little bit differently than 5.0 in this respect, so it does (in fact) defer more of the page loading and validation until a link is actually clicked. This is more for performance reasons than to shield developers from application problems. Even in 5.0, the loading and validation was the reach from page A to pages explicitly referenced (usually via PageLink during the rendering of page A), so it's a highly unlikely case that a single error in a 1000 page application will keep the application from starting up, unless the start page of the application links to all 999 other pages. Re-reading the above post I can't emphasize enough: you can't ignore quality problems. Quality problems lead to development failures, schedule slips, missing functionality, low morale and high turnover. Saying we don't have time to fix the quality problem first is to ignore the the second law of Thermodynamics. You are expecting a miracle, literally writing it into your project plan. Formos addresses this issue two ways: First, we use Scrum and deliver on (typically) 4 week cycles. Thus we set real deadlines and have a constant check on quality (we're providing working code constantly). We don't even try to predict what we'll be doing six months or two years from now, we just deliver a steady, manageable stream of software. Secondly, Formos uses Tapestry because of all the reasons that the anonymous developer's organization rejected it, and for many, many more reasons besides. -- Posted By Howard to Tapestry Central at 6/16/2009 03:45:00 PM - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org -- Joel Halbert 020 3051 8637 075 2501 0825 j...@su3analytics.com www.su3analytics.com www.storequery.com SU3 Analytics Ltd, The Print House, 18 Ashwin St, London E8 3DL. - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: [Tapestry Central] Why chose Tapestry?
I hear what your saying, I'm still not convinced :-) On Thursday 18 June 2009 09:57:11 p.stavrini...@albourne.com wrote: Hi Joel, I understand your argument with Maven, most people at some point have 'felt the pain' but with or without maven the devil is in the details, getting started is not that hard really, but customizing Tapestry to your environment is very often the root cause or configuration constipation, a problem which extends from the world of Java where there are so many resources, libraries and tools that it can often be a pain to integrate and use all of them efficiently. Its widely acknowledged that Java has inherent flaws in versioning and dependancy management (if only I had a penny for every post I have seen relating back to classpath, and library versioning issues), and thats the problem Maven tries to solve. In a small operation you can get away with doing dependency management manually, but not for enterprise applications or any development of scale. regards, Peter - Original Message - From: Joel Halbert j...@su3analytics.com To: users@tapestry.apache.org Sent: Thursday, 18 June, 2009 11:37:34 GMT +02:00 Athens, Beirut, Bucharest, Istanbul Subject: Re: [Tapestry Central] Why chose Tapestry? I'm still not convinced that using Maven is a good thing. It's fine for those people that use it day to day already, but for those people who have no need/interest in picking up another framework and who just want to get on with using Tapestry its a real bug bear. I've always just downloaded the binaries for whatever project I'm using and dropped them into my project. I very rarely have versioning issues (if every at all in fact). I'd go so far as to say that this is preferable - you know exactly what code your using, and why, because you've put it there yourself rather than having some opaque system under the hood doing it for you. This would seem to give you a greater degree of control over whats in your environment - important when it comes to deploying. On Wednesday 17 June 2009 22:15:23 Norman Franke wrote: I did, and that worked using jetty on the command line. Eventually, following the other instructions, I was able to even get that working in Eclipse. However, it is very basic: no hibernate, no security/ authentication. I started following the instructions in the tutorial, which do not work. Norman Franke Answering Service for Directors, Inc. www.myasd.com On Jun 17, 2009, at 2:21 PM, Juan E. Maya wrote: did u follow the tapestry quickstart in http://tapestry.apache.org/tapestry5.1/quickstart/ ? I don't think it could get easier than this. U can even run it inside eclipse if u have the m2 plugin for maven. i do agree with u that the documentation could be better, however, reading your message somebody could believe that starting a new tapestry project is extremely difficult and it's totally the contrary. On Wed, Jun 17, 2009 at 7:21 PM, Norman Frankenor...@myasd.com wrote: I've been using T4/4.1 for several years and have been quite pleased with it. I've been using it with Hibernate, and while not perfect, it's worked pretty well. We've found it much faster to embed a web browser in our main app and do editing, queries and the like via Tapestry than writing native code. I have a new project to replace our aging billing system. I figured this would be a great way to learn T5. So, I'm migrating me, not an app. :-) I was pondering posting this, but this thread sort of pushed me over the top. Note that I don't disagree with anything Howard said. However, this almost became Why I almost dumped Tapestry entirely. I'm writing this in order to solicit feedback and maybe help others. I've been using Tomcat (now 6.0.20) and Eclipse (now 3.4.2) for quite time time, and I'm very productive developing use them (and T4.1) I think this is a pretty common development environment. To get started in T5 for a fresh new app, my first thought was to follow the tutorial at http://tapestry.apache.org/tapestry5.1/tutorial1/. Chapter 2 just plain didn't work for me. I think part of it is due to Maven generally being extremely fragile and working less than half of the time. However, even after working around that, you can't just import the project into Eclipse. At least not under Eclipse 3.4.2. No problem, I thought. Maven is annoying anyway. I'll just create a Dynamic Web project (like I do for T4.1) and download the T5.1 binary distribution. That's even worse. It comes with no README listing dependencies or anything useful, and includes tons of libraries that don't appear to be even needed. Tapestry failed to start up during initialization. Why have a binary distro that doesn't work? Back to Maven. After some googling, I found this article: http
Re: [Tapestry Central] Why chose Tapestry?
. This is more for performance reasons than to shield developers from application problems. Even in 5.0, the loading and validation was the reach from page A to pages explicitly referenced (usually via PageLink during the rendering of page A), so it's a highly unlikely case that a single error in a 1000 page application will keep the application from starting up, unless the start page of the application links to all 999 other pages. Re-reading the above post I can't emphasize enough: you can't ignore quality problems. Quality problems lead to development failures, schedule slips, missing functionality, low morale and high turnover. Saying we don't have time to fix the quality problem first is to ignore the the second law of Thermodynamics. You are expecting a miracle, literally writing it into your project plan. Formos addresses this issue two ways: First, we use Scrum and deliver on (typically) 4 week cycles. Thus we set real deadlines and have a constant check on quality (we're providing working code constantly). We don't even try to predict what we'll be doing six months or two years from now, we just deliver a steady, manageable stream of software. Secondly, Formos uses Tapestry because of all the reasons that the anonymous developer's organization rejected it, and for many, many more reasons besides. -- Posted By Howard to Tapestry Central at 6/16/2009 03:45:00 PM -- Joel Halbert 020 3051 8637 075 2501 0825 j...@su3analytics.com www.su3analytics.com www.storequery.com SU3 Analytics Ltd, The Print House, 18 Ashwin St, London E8 3DL. - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: How big is the Tapestry community?
this is probably a better proxy: http://www.google.com/trends?q=java+tapestry+%2C+java+struts%2C+ruby +rails+ctab=0geo=alldate=allsort=0 -Original Message- From: Joel Halbert j...@su3analytics.com Reply-To: Tapestry users users@tapestry.apache.org To: Tapestry users users@tapestry.apache.org Subject: Re: How big is the Tapestry community? Date: Mon, 08 Jun 2009 10:07:26 +0100 Google Trends is often useful as a proxy: http://www.google.com/trends?q=tapestry%2C+ruby+on+rails%2C +strutsctab=0geo=alldate=allsort=0 (I think that the high level of stuts usage in India is due to the outsourced enterprise community there) -Original Message- From: hari ks hari_...@yahoo.com Reply-To: Tapestry users users@tapestry.apache.org To: Tapestry users users@tapestry.apache.org Subject: Re: How big is the Tapestry community? Date: Mon, 8 Jun 2009 01:54:42 -0700 (PDT) From indian job sites- naukri.com/timesjobs.com - one or two companies want tapestry developers(along with JSF knowledge). Most companies want jsf/struts/spring mvc/wicket(primarily JSF). Previously(1-2 yr back) companies like verizon telecom were asking for core tapestry developers in chennai. There seems need for another book that explains tapestry 5 internals(a 1000 page book). The book- developing web applications with tapestry doesn't explain tapestry internals as good as the tapestry web site links. -Hari Sujathan http://www.nomarriage.com --- On Sat, 6/6/09, Howard Lewis Ship hls...@gmail.com wrote: From: Howard Lewis Ship hls...@gmail.com Subject: How big is the Tapestry community? To: Tapestry users users@tapestry.apache.org Date: Saturday, June 6, 2009, 9:30 PM Here's a question: how many people are using Tapestry? And how do you figure out how many people are using Tapestry? When asked, I answer what I think is an honest answer: there's probably 1000 - 2000 teams using Tapestry ... but mostly I pulled that number out of the air. That would be one team for every five copies of Tapestry in Action sold, but that's now an old book. There's at least an order of magnitude from Tapestry to Struts. I wonder how T5 compares to SpringMVC or Grails? So, what would be YOUR estimate and YOUR methodology for determining the number of Tapestry coders out there? -- Howard M. Lewis Ship Creator of Apache Tapestry Director of Open Source Technology at Formos - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
RE: T5: Passing named/structured-type params in URLs?
I have a desire to use a context where the delimeter for one of the values is itself a '/'. For example: /docs/my/path/to/doc/document1/param1/param2 Do you mean that one of the parameters is the value document/, if so will T5 not URL encode this to the value document%2F ? (although StringValueEncoder, v5.0.18, does not appear to) If it doesn't then presumably you can so that you end up with: /docs/my/path/to/doc/document1%2F/param1/param2 I might have misunderstood what you are trying to do though. -Original Message- From: Alfie Kirkpatrick alfie.kirkpatr...@ioko.com Reply-To: Tapestry users users@tapestry.apache.org To: Tapestry users users@tapestry.apache.org Subject: RE: T5: Passing named/structured-type params in URLs? Date: Wed, 13 May 2009 12:53:31 +0100 I've been following this thread with interest and have a somewhat different requirement. I have a desire to use a context where the delimeter for one of the values is itself a '/'. For example: /docs/my/path/to/doc/document1/param1/param2 I can do this by hand in a page by having onActivate(EventContext ctx) and iterating the elements of the path. However, what if param2 is optional? Also, it means I have to do this work manually on every page. I realise that to make this work more generally I'd need to have another kind of separator in there, eg: /docs/my/path/to/doc/document1/-/param1/param2 I'd might then have a signature like: void onActivate(DocPath path, Object param1, Object param2) and have the T5 machinery encode/decode urls accordingly. Is this possible or am I asking too much? This is all in a drive to having nice looking URLs... A simpler alternative might be to simply use a different context value separater, eg. '-' for apps where the context values are themselves meaningful paths. Is this possible? This would lead to a url like: /docs/my/path/to/doc/document1-param1-param2 Which kind of works for me. Thanks! Alfie. -Original Message- From: Joel Halbert [mailto:j...@su3analytics.com] Sent: 12 May 2009 17:51 To: Tapestry users Subject: Re: T5: Passing named/structured-type params in URLs? Hi Andy, The same Encoder could indeed be used across multiple pages. Some pointers: You need to create one of these: http://tapestry.apache.org/tapestry5/apidocs/org/apache/tapestry/ValueEncoder.html Look at the source for one of the existing implementation for ideas, e.g. StringEncoder [snip] - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: Solving the T5 Documentation Dilemma
ditto. -1 forum -Original Message- From: Christian Edward Gruber christianedwardgru...@gmail.com Reply-To: Tapestry users users@tapestry.apache.org To: Tapestry users users@tapestry.apache.org Subject: Re: Solving the T5 Documentation Dilemma Date: Wed, 13 May 2009 09:29:10 -0400 -1 on forum for the same reasons. On 13-May-09, at 07:36 , Alfie Kirkpatrick wrote: -1 for a forum. I like the fact I can choose between users and users- digest, and I can use nabble or markmail to browse the archive. Unless the proposal is to stop the mailing list, I feel that a forum will simply act to fragment discussions which are an invaluable information source. Best regards, Alfie. -Original Message- From: liigo [mailto:com.li...@gmail.com] Sent: 13 May 2009 03:02 To: Tapestry users Subject: Re: Solving the T5 Documentation Dilemma +1 for Official docs and User docs, and +1 for tapestry forum Christian Edward Gruber e-mail: christianedwardgru...@gmail.com weblog: http://www.geekinasuit.com/ - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: T5: Passing named/structured-type params in URLs?
Hi Andy, The same Encoder could indeed be used across multiple pages. Some pointers: You need to create one of these: http://tapestry.apache.org/tapestry5/apidocs/org/apache/tapestry/ValueEncoder.html Look at the source for one of the existing implementation for ideas, e.g. StringEncoder I've attached an example implementation of a MapValueEncoder.java You will then need to configure your Tap App to use your encoder e.g. public static void contributeValueEncoderSource(MappedConfigurationClass, ValueEncoderFactory configuration) { configuration.add(Map.class, new GenericValueEncoderFactoryMap(new MapValueEncoder())); } You can then have activation context's that take a Map e.g. protected boolean onActivate(Map params) { id = params.get(id); } I'm sure there is a doc page for encoders, although I cann't seem to dig it out. -Original Message- From: Andy Buckley andy.buck...@durham.ac.uk Reply-To: Tapestry users users@tapestry.apache.org To: Tapestry users users@tapestry.apache.org Subject: Re: T5: Passing named/structured-type params in URLs? Date: Tue, 12 May 2009 16:07:06 +0100 Joel Halbert wrote: There was a jira feature request raised for named params some time ago: https://issues.apache.org/jira/browse/TAP5-264 Andy - in the meantime, another alternative is to create a custom ValueEncoder for activation contexts which can encode and decode a map. You could then encode the map context using a scheme which uses, for example, underscores as delimiters, such as: /mypage/name1_value1_name2_value2 (i.e. /mypage/context) This would allow you to access params by name from an activation context. This works well enough so long as you do not care about using the correct http request syntax for query strings (?name1=value1name2=value2). I've ended up essentially doing this, but more manually via the onActivate() method of the page. Can you point me at any documentation on how to do this with a custom ValueEncoder as you've suggested, and what the benefits would be of doing it that way? (e.g. would this make it easy to use the same param value encoding scheme on multiple pages?) Cheers, Andy import java.io.UnsupportedEncodingException; import java.net.URLDecoder; import java.net.URLEncoder; import java.util.Iterator; import java.util.Map; import org.apache.commons.collections.map.ListOrderedMap; import org.apache.log4j.Logger; import org.apache.tapestry5.ValueEncoder; public class MapValueEncoder implements ValueEncoder { static final Logger log = Logger.getLogger(MapValueEncoder.class); private static final String DELIM = _; @Override public String toClient(Object value) { String res = ; IteratorString it = null; MapString,Object map = (MapString, Object) value; if (value instanceof ListOrderedMap) { ListOrderedMap lomap = (ListOrderedMap) value; it = lomap.keyList().iterator(); } else { it = map.keySet().iterator(); } while(it.hasNext()) { String key = it.next(); Object val = map.get(key); if (val != null) { if (res.length() 0) { res += DELIM; } res += key + DELIM + escapeString(val.toString()); } } return res; } @Override public Object toValue(String clientValue) { String[] tokens = clientValue.split(DELIM); ListOrderedMap res = new ListOrderedMap(); boolean tokIsKey = true; String currKey = null; for (int i = 0; i tokens.length; i++) { String tok = tokens[i]; if (tokIsKey) { currKey = tok; } else { res.put(currKey, descapeString(tok)); } tokIsKey = !tokIsKey; } return res; } public static String escapeString(String string) { try { return URLEncoder.encode(string, UTF-8); } catch (UnsupportedEncodingException e) { log.error(unable to encode : + string, e); return ; } } public static String descapeString(String string) { try { return URLDecoder.decode(string, UTF-8); } catch (UnsupportedEncodingException e) { log.error(unable to descape : + string, e); return ; } } } - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: T5: Passing named/structured-type params in URLs?
There was a jira feature request raised for named params some time ago: https://issues.apache.org/jira/browse/TAP5-264 Andy - in the meantime, another alternative is to create a custom ValueEncoder for activation contexts which can encode and decode a map. You could then encode the map context using a scheme which uses, for example, underscores as delimiters, such as: /mypage/name1_value1_name2_value2 (i.e. /mypage/context) This would allow you to access params by name from an activation context. This works well enough so long as you do not care about using the correct http request syntax for query strings (?name1=value1name2=value2). -Original Message- From: Carl Crowder carl.crow...@taptu.com Reply-To: Tapestry users users@tapestry.apache.org To: Tapestry users users@tapestry.apache.org Subject: Re: T5: Passing named/structured-type params in URLs? Date: Sat, 09 May 2009 12:05:28 +0100 I did actually try writing something like this a while ago. The problem is that you need to specify more than just the name of the parameter, you need to know which component it's part of. I ended up with urls like: /page?component1.component2.param=somevaluecomponent1.component3.param2=somevalue So as you can see, they quickly become very large. You could mandate that only top-level components (ie, pages) can use that persistence strategy, but that seems to be counter-intuitive. I toyed with the idea of mapping those names to some smaller IDs - a service which simply converts p1 to component1.component2.param so you could have urls looking like: /page?p1=somevaluep2=somevalue The problem then is it's hard to work out what the params actually are for the user/developer. Also, how do you populate that map to start with? You'd have to load each page and component class at startup. I didn't ever finish this code as I worked out how to do what I wanted with vanilla PageActicationContext in the end. Robert Zeigler wrote: That should work. I think it could be interesting, though, if tapestry provided an additional persistence mechanism, ala: @Persist(PersistenceConstants.QUERY_PARAMETER) private String p; @Persist(PersistenceConstants.QUERY_PARAMETR) private Integer irn; which would then take the values in p and irn and stash them in the url, like: p=valueEncodedValueirn=valueEncodedValue Obviously this wouldn't be appropriate to use everywhere; if you're concerned about users tampering with URLs, you'd want to avoid it. But in cases like that presented below, where you expressly want users to be able to muck about with parameters, it would be useful. Note that this is similar to the current client-side persistence mechanism, except that mechanism a) rolls all persisted values into a single parameter and b) base64 encodes the parameter. As long as you've got the basic mechanism for doing the above, you could translate it into a pretty url via url rewriting without too much trouble. Thoughts? Robert On May 8, 2009, at 5/83:59 PM , Thiago H. de Paula Figueiredo wrote: Em Fri, 08 May 2009 17:39:07 -0300, Andy Buckley andy.buck...@durham.ac.uk escreveu: So, is there a Tapestry meachnism for doing something like this? I can do it right now, but I'd rather not have to fight the system. I would expect Tapestry to do it a bit prettier than what I've shown, maybe *something* like .../view/irn/12349876/d/1,2,4 (yes, there are issues with telling what's a param name and what's a value... I just mean this schematically) But right now I don't even know where to start looking! Help, please!? ;) Just use a List as the activation context value. For each named parameter one want, add the name first, the value second. The above URL would be constructed by Tapestry if you returned a List populated like this: List list = new ArrayList(); list.add(irn); list.add(1245569); list.add(d); list.add(1,2,4); Then, declare a onActivate(EventContext context) method and reconstruct the pairs: for (int i = 0; i context.getCount() / 2; i++) { String name = context.get(String.class, i * 2); String value = context.get(String.class, i * 2 + 1) // instead of String, you could use any type here } I have not tested this code, but I guess you get the idea. ;) -- Thiago H. de Paula Figueiredo Independent Java consultant, developer, and instructor http://www.arsmachina.com.br/thiago - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional
Re: Solving the T5 Documentation Dilemma
The primary concern, at the moment, seems to be encouraging people to contribute documentation, tutorials and examples. Making the adding, updating and extension of docs as open (so anyone can do it) and simple (so it is not an arduous task) is the key to this. Howard's suggestion of using the confluence Wiki - and taking snapshots of docs whenever a new release is done makes sense. I would encourage anyone to contribute, and I'm sure that the regular reviewers will compensate for occasional inaccuracies. Anything more cumbersome will put people off. I don't like the idea of tying it into Maven. I for one don't use Maven, and the perceived additional complexity may put others off experimenting using Tap. -Original Message- From: Otho taa...@googlemail.com Reply-To: Tapestry users users@tapestry.apache.org To: Tapestry users users@tapestry.apache.org Subject: Re: Solving the T5 Documentation Dilemma Date: Fri, 1 May 2009 08:43:30 +0200 I would suggest splitting the documentation. There should be the reference documentation by the creators/commiters of the project, whis is organized like a book covering all the different aspects of tapestry 5 in a reference manner eg like spring or hibernate docs. These are tied to the release version, too. And then there should be the community docs with tutorials, howto's, recipes and so on on a wiki. There should be a pattern in the templates which requires or at least pushes you, to mention the version of Tapestry you are using. And lastly I would suggest setting up a forum. Information is more easily organized there and searching is more convenient than wíth a mailing list alone. I would think that the barrier of contributing to a forum is lower than that of contributing to / asking on a mailinglist. Well, the latter can also be seen as a feature in a way, but publicity and visibility never really hurt IMO. 2009/4/30 Piero Sartini p...@sartini-its.com I don't think Tapestry's wiki, http://wiki.apache.org/tapestry, is up to the task. Confluence is available with apache as well. There is already a space available at http://cwiki.apache.org/TAPESTRY/ ... maybe its just a matter of adding content to it? Anyway.. on Tapestry360 someone would not need to sign a CLA to contribute to the documentation. Piero - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: once-only onActivate method
This might help... PageLoaded ... http://tapestry.apache.org/tapestry5/apidocs/org/apache/tapestry5/annotations/PageLoaded.html -Original Message- From: Bryan Lewis jbryanle...@gmail.com Reply-To: Tapestry users users@tapestry.apache.org To: users@tapestry.apache.org Subject: once-only onActivate method Date: Sun, 19 Apr 2009 22:18:10 -0400 I need a method that will get called exactly once when a page is first invoked, and not again when a form in the page is submitted. In Tapestry 4 the activateExternalPage() method was good for that. I don't think the new onActivate() method is a replacement, nor is the SetupRender-annotated method. For example, they get called when an autocomplete textfield is used in mid-form. How do I do this in Tap 5? (My intent is to clear any stale changes in my Cayenne DataContext.) Thanks. -- Joel Halbert 020 3051 8637 075 2501 0825 j...@storequery.com www.storequery.com SU3 Analytics Ltd, The Print House, 18 Ashwin St, London E8 3DL. - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: [T5] problem with CSS in tml.
.ioc.services.CoercionTuple$CoercionWrapper.coerce(CoercionTuple.java:51) at org.apache.tapestry5.ioc.internal.services.TypeCoercerImpl.coerce(TypeCoercerImpl.java:127) ... 55 more For example I have one page and on that page i have PageLink component with context type long: t:pagelink t:page=AlbumDetails t:context=currentSong.id ${currentSong.album} /t:pagelink As you can see when i click on page it loads AlbumDetails with context. Now this parameter is what is causing exceptions (i think). The page loads fine but I cannot see any images, just colors and text is formatted as CSS. What could be the problem? Thanks -- Joel Halbert 020 3051 8637 075 2501 0825 j...@storequery.com www.storequery.com SU3 Analytics Ltd, The Print House, 18 Ashwin St, London E8 3DL. - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: [T5] problem with CSS in tml.
looks like you have a badly anchored image somewhere on your page.. Something is being generated like img src=images/bla.png / the incorrectly rooted images path causes tap to think this resource is page local and tries to call onActivate on the current page passing in the images string as an argument. Check that all your images are correctly anchored. Coercion of images to type java.lang.Long (via String -- Long) failed: For input string: images org.apache.tapestry5.runtime.ComponentEventException: Exception in method org.goran.mstore.pages.ArtistDetails.onActivate(long) (at ArtistDetails.java:34), parameter #1: Coercion of images to type java.lang.Long (via String -- Long) failed: For input string: images -Original Message- From: Entheogen gor...@gmail.com Reply-To: Tapestry users users@tapestry.apache.org To: users@tapestry.apache.org Subject: [T5] problem with CSS in tml. Date: Sun, 19 Apr 2009 08:32:19 -0700 (PDT) Hi, I just started learning tapestry and i'm having some trouble with CSS integration. I added style sheet directly into tml with style/style tag because external CSS didn't work. Anyway when I'm trying to load a page which has a context i get some exceptions: [ERROR] TapestryModule.RequestExceptionHandler Processing of request failed with uncaught exception: Exception in method org.goran.mstore.pages.ArtistDetails.onActivate(long) (at ArtistDetails.java:34), parameter #1: Coercion of images to type java.lang.Long (via String -- Long) failed: For input string: images org.apache.tapestry5.runtime.ComponentEventException: Exception in method org.goran.mstore.pages.ArtistDetails.onActivate(long) (at ArtistDetails.java:34), parameter #1: Coercion of images to type java.lang.Long (via String -- Long) failed: For input string: images at org.apache.tapestry5.internal.structure.ComponentPageElementImpl.triggerContextEvent(ComponentPageElementImpl.java:1076) at org.apache.tapestry5.internal.services.PageRenderRequestHandlerImpl.handle(PageRenderRequestHandlerImpl.java:52) at org.apache.tapestry5.services.TapestryModule$35.handle(TapestryModule.java:1779) at $PageRenderRequestHandler_120bef7fba6.handle($PageRenderRequestHandler_120bef7fba6.java) at $PageRenderRequestHandler_120bef7fb99.handle($PageRenderRequestHandler_120bef7fb99.java) at org.apache.tapestry5.internal.services.PageRenderDispatcher.process(PageRenderDispatcher.java:92) at org.apache.tapestry5.internal.services.PageRenderDispatcher.dispatch(PageRenderDispatcher.java:71) at $Dispatcher_120bef7fb9f.dispatch($Dispatcher_120bef7fb9f.java) at $Dispatcher_120bef7fb92.dispatch($Dispatcher_120bef7fb92.java) at org.apache.tapestry5.services.TapestryModule$17.service(TapestryModule.java:1029) at org.apache.tapestry5.internal.services.LocalizationFilter.service(LocalizationFilter.java:42) at $RequestHandler_120bef7fb93.service($RequestHandler_120bef7fb93.java) at org.apache.tapestry5.internal.services.RequestErrorFilter.service(RequestErrorFilter.java:26) at $RequestHandler_120bef7fb93.service($RequestHandler_120bef7fb93.java) at org.apache.tapestry5.services.TapestryModule$3.service(TapestryModule.java:621) at $RequestHandler_120bef7fb93.service($RequestHandler_120bef7fb93.java) at org.apache.tapestry5.services.TapestryModule$2.service(TapestryModule.java:611) at $RequestHandler_120bef7fb93.service($RequestHandler_120bef7fb93.java) at org.apache.tapestry5.internal.services.StaticFilesFilter.service(StaticFilesFilter.java:85) at $RequestHandler_120bef7fb93.service($RequestHandler_120bef7fb93.java) at org.goran.mstore.services.AppModule$1.service(AppModule.java:85) at $RequestFilter_120bef7fb8d.service($RequestFilter_120bef7fb8d.java) at $RequestHandler_120bef7fb93.service($RequestHandler_120bef7fb93.java) at org.apache.tapestry5.internal.services.CheckForUpdatesFilter$2.invoke(CheckForUpdatesFilter.java:93) at org.apache.tapestry5.internal.services.CheckForUpdatesFilter$2.invoke(CheckForUpdatesFilter.java:84) at org.apache.tapestry5.ioc.internal.util.ConcurrentBarrier.withRead(ConcurrentBarrier.java:83) at org.apache.tapestry5.internal.services.CheckForUpdatesFilter.service(CheckForUpdatesFilter.java:106) at $RequestHandler_120bef7fb93.service($RequestHandler_120bef7fb93.java) at $RequestHandler_120bef7fb89.service($RequestHandler_120bef7fb89.java) at org.apache.tapestry5.services.TapestryModule$16.service(TapestryModule.java:1007) at org.apache.tapestry5.internal.services.IgnoredPathsFilter.service(IgnoredPathsFilter.java:62) at $HttpServletRequestFilter_120bef7fb88.service($HttpServletRequestFilter_120bef7fb88.java) at $HttpServletRequestHandler_120bef7fb8a.service($HttpServletRequestHandler_120bef7fb8a.java) at
T5 jsession id in url crashing tap URLEncoder
I am seeing bot requests to our site which have the session id encoded in the request url because they are not using cookies: e.g. 66.249.70.177 - - [17/Mar/2009:08:43:23 +] GET /store/product/2799% 3Bjsessionid=1660715C3C8E125693B0B98550FFEC87 HTTP/1.1 500 3931 - Mozilla/ 5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html) This is resulting in an exception in T5.0.18 2009-03-17 08:43:23,937 [TP-Processor2] ERROR org.apache.tapestry5.services.TapestryModule.RequestExceptionHandler - Processing of request failed with uncau ght exception: Input string '2799;jsessionid=1660715C3C8E125693B0B98550FFEC87' is not valid; the character ';' at position 5 is not valid. java.lang.IllegalArgumentException: Input string '2799;jsessionid=1660715C3C8E125693B0B98550FFEC87' is not valid; the character ';' at position 5 is not val id. at org.apache.tapestry5.internal.services.URLEncoderImpl.decode(URLEncoderImpl.java:143) at $URLEncoder_120118ad084.decode($URLEncoder_120118ad084.java) at org.apache.tapestry5.internal.services.ContextPathEncoderImpl.decodePath(ContextPathEncoderImpl.java:70) Should the URLEncoder not be able to correctly decode a request with an encoded session id? Or this this symptomatic of some other issue? Thank, Joel - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
T5: Construction of service 'Alias' has failed due to recursion: the service depends on itself in some way. Please check.
Hi, I get the following: Caused by: java.lang.IllegalStateException: Construction of service 'Alias' has failed due to recursion: the service depends on itself in some way. Please check org.apache.tapestry5.services.TapestryModule.buildAlias(Logger, String, AliasManager, Collection) (at TapestryModule.java:217) for references to another service that is itself dependent on service 'Alias'. When contributing the following alias: public static void contributeAlias( ConfigurationAliasContributionMarkupWriterFactory configuration, @Inject @Symbol(SymbolConstants.CHARSET) final String applicationCharset) { configuration.add(AliasContribution.create(MarkupWriterFactory.class, new XhtmlMarkupWriterFactoryImpl(applicationCharset))); } as per http://wiki.apache.org/tapestry/Tapestry5HowToXhtml I've seen the other threads on this issue but they haven't helped. Any ideas? THanks, Joel - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
Re: T5: Construction of service 'Alias' has failed due to recursion: the service depends on itself in some way. Please check.
the problem appears to be related to another conitribution method: public void contributeApplicationDefaults( MappedConfigurationString, String configuration, @Inject ApplicationGlobals applicationGlobals, @Inject SymbolSource symbolSource ) { . . when this is commented out it no longer throws the error, I guess the double dependency on SymbolSource is causing the problem...? On Wed, 2008-11-26 at 09:06 -0800, Howard Lewis Ship wrote: 5.0.16 introduces much improved logging to the console when this happens, it should help you diagnost what happened. What I see looks correct, but there may be something else going on that we can't see. On Wed, Nov 26, 2008 at 8:58 AM, Joel Halbert [EMAIL PROTECTED] wrote: Hi, I get the following: Caused by: java.lang.IllegalStateException: Construction of service 'Alias' has failed due to recursion: the service depends on itself in some way. Please check org.apache.tapestry5.services.TapestryModule.buildAlias(Logger, String, AliasManager, Collection) (at TapestryModule.java:217) for references to another service that is itself dependent on service 'Alias'. When contributing the following alias: public static void contributeAlias( ConfigurationAliasContributionMarkupWriterFactory configuration, @Inject @Symbol(SymbolConstants.CHARSET) final String applicationCharset) { configuration.add(AliasContribution.create(MarkupWriterFactory.class, new XhtmlMarkupWriterFactoryImpl(applicationCharset))); } as per http://wiki.apache.org/tapestry/Tapestry5HowToXhtml I've seen the other threads on this issue but they haven't helped. Any ideas? THanks, Joel - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] -- SU3 Analytics Ltd The Print House 18 Ashwin Street E8 3DL London Tel: +44 (0) 20 3051 8637 Fax: +44 (0) 20 8196 2215 Mob: +44 (0) 79 7431 0685 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]
Re: T5: Construction of service 'Alias' has failed due to recursion: the service depends on itself in some way. Please check.
For the time being I'm going to solve the problem by simply hardiwing the charset On Wed, 2008-11-26 at 17:35 +, Joel Halbert wrote: the problem appears to be related to another conitribution method: public void contributeApplicationDefaults( MappedConfigurationString, String configuration, @Inject ApplicationGlobals applicationGlobals, @Inject SymbolSource symbolSource ) { . . when this is commented out it no longer throws the error, I guess the double dependency on SymbolSource is causing the problem...? On Wed, 2008-11-26 at 09:06 -0800, Howard Lewis Ship wrote: 5.0.16 introduces much improved logging to the console when this happens, it should help you diagnost what happened. What I see looks correct, but there may be something else going on that we can't see. On Wed, Nov 26, 2008 at 8:58 AM, Joel Halbert [EMAIL PROTECTED] wrote: Hi, I get the following: Caused by: java.lang.IllegalStateException: Construction of service 'Alias' has failed due to recursion: the service depends on itself in some way. Please check org.apache.tapestry5.services.TapestryModule.buildAlias(Logger, String, AliasManager, Collection) (at TapestryModule.java:217) for references to another service that is itself dependent on service 'Alias'. When contributing the following alias: public static void contributeAlias( ConfigurationAliasContributionMarkupWriterFactory configuration, @Inject @Symbol(SymbolConstants.CHARSET) final String applicationCharset) { configuration.add(AliasContribution.create(MarkupWriterFactory.class, new XhtmlMarkupWriterFactoryImpl(applicationCharset))); } as per http://wiki.apache.org/tapestry/Tapestry5HowToXhtml I've seen the other threads on this issue but they haven't helped. Any ideas? THanks, Joel - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] -- SU3 Analytics Ltd The Print House 18 Ashwin Street E8 3DL London Tel: +44 (0) 20 3051 8637 Fax: +44 (0) 20 8196 2215 Mob: +44 (0) 79 7431 0685 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]
Re: T5: Construction of service 'Alias' has failed due to recursion: the service depends on itself in some way. Please check.
damn, my last email was sent before i'd finished... . . For the time being I'm going to solve the problem by hardwiring the charset public static void contributeAlias( ConfigurationAliasContributionMarkupWriterFactory configuration ) { configuration.add(AliasContribution.create(MarkupWriterFactory.class, new XhtmlMarkupWriterFactoryImpl(UTF-8))); } I should not imaging that injecting services into the alias contribution is something that will be required much anyway On Wed, 2008-11-26 at 17:42 +, Joel Halbert wrote: For the time being I'm going to solve the problem by simply hardiwing the charset On Wed, 2008-11-26 at 17:35 +, Joel Halbert wrote: the problem appears to be related to another conitribution method: public void contributeApplicationDefaults( MappedConfigurationString, String configuration, @Inject ApplicationGlobals applicationGlobals, @Inject SymbolSource symbolSource ) { . . when this is commented out it no longer throws the error, I guess the double dependency on SymbolSource is causing the problem...? On Wed, 2008-11-26 at 09:06 -0800, Howard Lewis Ship wrote: 5.0.16 introduces much improved logging to the console when this happens, it should help you diagnost what happened. What I see looks correct, but there may be something else going on that we can't see. On Wed, Nov 26, 2008 at 8:58 AM, Joel Halbert [EMAIL PROTECTED] wrote: Hi, I get the following: Caused by: java.lang.IllegalStateException: Construction of service 'Alias' has failed due to recursion: the service depends on itself in some way. Please check org.apache.tapestry5.services.TapestryModule.buildAlias(Logger, String, AliasManager, Collection) (at TapestryModule.java:217) for references to another service that is itself dependent on service 'Alias'. When contributing the following alias: public static void contributeAlias( ConfigurationAliasContributionMarkupWriterFactory configuration, @Inject @Symbol(SymbolConstants.CHARSET) final String applicationCharset) { configuration.add(AliasContribution.create(MarkupWriterFactory.class, new XhtmlMarkupWriterFactoryImpl(applicationCharset))); } as per http://wiki.apache.org/tapestry/Tapestry5HowToXhtml I've seen the other threads on this issue but they haven't helped. Any ideas? THanks, Joel - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] -- SU3 Analytics Ltd The Print House 18 Ashwin Street E8 3DL London Tel: +44 (0) 20 3051 8637 Fax: +44 (0) 20 8196 2215 Mob: +44 (0) 79 7431 0685 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]
Re: [T5] Persistent fields may not be updated until after the page has finished loading
in relation to this thread - and specifically in relation to using pageAttached() to initialise p[age fields - I raised the following possible bug the other day, https://issues.apache.org/jira/browse/TAP5-374 I was wondering if this was something anyone else had noticed/reproduced? On Fri, 2008-11-21 at 12:32 -0800, Eric Ma wrote: Thanks for your reply. I have a follow up question: For @Persist field, when and how does variable binding (from HTTP session-cached value) happen? Let me explain: Previously, when I use inline (or constructor-based) variable initialization, although I don't know how the magic works, I am guaranteed that only the first time a component/page object is instantiated, the @Persist field is populated with the initial value. Subsequently when the component/page object is retrieved from the object pool and re-used, it is not the initial value, but the session-cached value, that is associated with the variable. This is important because the field value might have changed due to user action between the object instantiation and re-use. If I have to assign value explicitly in @SetupRender, since that method is always called by Tapestry whether this is a new or re-used object instance, to ensure the session-cached value is bound to the filed, do I have to do (can we assume this is how T5 actually work behind the scene)? @SetupRender () { void initializeField() { if(session.getAttribute(persistedFieldName) == null) { myPersistedField = some initial value; } } , which has 2 major problems: 1. I have to touch HttpSession, something that T5 makes every effort to hide from me. 2. Can I assume the session key is actually the session key. What if the T5 internal implementation changes tomorrow? Marcel Sammut wrote: I had the same problem when moving to 5.0.16. It was pretty simple for me, since what I was doing was initializing my persistant variables in the declaration. What I did was move the initialization to the SetupRender phase of the cycle. For example: @Persist private int count = 0; became: @Persist private int count; @SetupRender void setupRender() { count = 0; } Hope that works for you too. Cheers, Marcel -- SU3 Analytics Ltd The Print House 18 Ashwin Street E8 3DL London Tel: +44 (0) 20 3051 8637 Fax: +44 (0) 20 8196 2215 Mob: +44 (0) 79 7431 0685 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]
Re: T5: page lifecle methods persistent fields : bug or expected behaviour?
I'm going to raise this as a bug in JIRA, unless anyone thinks it shouldn't be. On Wed, 2008-11-19 at 16:07 +, Joel Halbert wrote: Hi, I am seeing unexpected behaviour when using persistent fields and the page lifecycle method, pageAttached(), (T 5.0.15). I have a persistent field, @Persist private Map myMap; I also have a page lifecycle method, void pageAttached() { if (myMap == null){ myMap = new HashMap(); } } I expect that when the page first loads and myMap is null then myMap will be initialised to an empty map, thereafter I expect anything I put into the map to persist across requests. What I actually see is that, if the above pageAttached method is present then any data that I put into myMap does not persist across requests (the map is always empty). I was not expecting this at all. By design or bug? Rgs, Joel - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] -- SU3 Analytics Ltd The Print House 18 Ashwin Street E8 3DL London Tel: +44 (0) 20 3051 8637 Fax: +44 (0) 20 8196 2215 Mob: +44 (0) 79 7431 0685 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]
Re: T5: page lifecle methods persistent fields : bug or expected behaviour?
https://issues.apache.org/jira/browse/TAP5-374 On Thu, 2008-11-20 at 09:15 +, Joel Halbert wrote: I'm going to raise this as a bug in JIRA, unless anyone thinks it shouldn't be. On Wed, 2008-11-19 at 16:07 +, Joel Halbert wrote: Hi, I am seeing unexpected behaviour when using persistent fields and the page lifecycle method, pageAttached(), (T 5.0.15). I have a persistent field, @Persist private Map myMap; I also have a page lifecycle method, void pageAttached() { if (myMap == null){ myMap = new HashMap(); } } I expect that when the page first loads and myMap is null then myMap will be initialised to an empty map, thereafter I expect anything I put into the map to persist across requests. What I actually see is that, if the above pageAttached method is present then any data that I put into myMap does not persist across requests (the map is always empty). I was not expecting this at all. By design or bug? Rgs, Joel - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] -- SU3 Analytics Ltd The Print House 18 Ashwin Street E8 3DL London Tel: +44 (0) 20 3051 8637 Fax: +44 (0) 20 8196 2215 Mob: +44 (0) 79 7431 0685 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]
Re: Improvements to Loop
Hi, I just tried implementing the suggestion below - to inject the Loop to access it's index so i need not define my own - however index in Loop is package private, thus I can not read it. Am I missing something here? Thx, Joel On Tue, 2008-11-11 at 08:43 -0800, Howard Lewis Ship wrote: If you inject the Loop component and make it a property, you can refer to loop.index, which saves you from having to create an index property. On Tue, Nov 11, 2008 at 2:55 AM, Joel Halbert [EMAIL PROTECTED] wrote: Hi, Thoughts please on the following enhancements to Loop: a) utility parameters/methods for isFirst and isLast iteration, maybe something like: t:loop t:parameter name=isFirst // hello! /t:paramter t:parameter name=isLast // bye! /t:paramter /t:loop b) easy access to the current index value, without having to provide your own. Although you can provide your own index, this gets messy when using inner loops, since you need to reset the inner loop index on every iteration of the outer loop. This seems like boiler plate that could be incorporated into the framework. If there are already nice patterns for doing the above please shout, if not then let us know your thoughts on making these part of the framework Rgs, Joel -- SU3 Analytics Ltd The Print House 18 Ashwin Street E8 3DL London Tel: +44 (0) 20 3051 8637 Fax: +44 (0) 20 8196 2215 Mob: +44 (0) 79 7431 0685 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 The Print House 18 Ashwin Street E8 3DL London Tel: +44 (0) 20 3051 8637 Fax: +44 (0) 20 8196 2215 Mob: +44 (0) 79 7431 0685 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]
T5: page lifecle methods persistent fields : bug or expected behaviour?
Hi, I am seeing unexpected behaviour when using persistent fields and the page lifecycle method, pageAttached(), (T 5.0.15). I have a persistent field, @Persist private Map myMap; I also have a page lifecycle method, void pageAttached() { if (myMap == null){ myMap = new HashMap(); } } I expect that when the page first loads and myMap is null then myMap will be initialised to an empty map, thereafter I expect anything I put into the map to persist across requests. What I actually see is that, if the above pageAttached method is present then any data that I put into myMap does not persist across requests (the map is always empty). I was not expecting this at all. By design or bug? Rgs, Joel - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
Re: Improvements to Loop
no, the error is at runtime, index is not visible. On Wed, 2008-11-19 at 10:51 -0600, Steven Woolley wrote: I guessing it's a synthetic property (has getter added at runtime) so you probably can't access it in java code, but can access it from the template using ${loop.index}. That's just a hunch though. Steve On Wed, Nov 19, 2008 at 9:03 AM, Joel Halbert [EMAIL PROTECTED] wrote: Hi, I just tried implementing the suggestion below - to inject the Loop to access it's index so i need not define my own - however index in Loop is package private, thus I can not read it. Am I missing something here? Thx, Joel On Tue, 2008-11-11 at 08:43 -0800, Howard Lewis Ship wrote: If you inject the Loop component and make it a property, you can refer to loop.index, which saves you from having to create an index property. On Tue, Nov 11, 2008 at 2:55 AM, Joel Halbert [EMAIL PROTECTED] wrote: Hi, Thoughts please on the following enhancements to Loop: a) utility parameters/methods for isFirst and isLast iteration, maybe something like: t:loop t:parameter name=isFirst // hello! /t:paramter t:parameter name=isLast // bye! /t:paramter /t:loop b) easy access to the current index value, without having to provide your own. Although you can provide your own index, this gets messy when using inner loops, since you need to reset the inner loop index on every iteration of the outer loop. This seems like boiler plate that could be incorporated into the framework. If there are already nice patterns for doing the above please shout, if not then let us know your thoughts on making these part of the framework Rgs, Joel -- SU3 Analytics Ltd The Print House 18 Ashwin Street E8 3DL London Tel: +44 (0) 20 3051 8637 Fax: +44 (0) 20 8196 2215 Mob: +44 (0) 79 7431 0685 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 The Print House 18 Ashwin Street E8 3DL London Tel: +44 (0) 20 3051 8637 Fax: +44 (0) 20 8196 2215 Mob: +44 (0) 79 7431 0685 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 The Print House 18 Ashwin Street E8 3DL London Tel: +44 (0) 20 3051 8637 Fax: +44 (0) 20 8196 2215 Mob: +44 (0) 79 7431 0685 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]
Re: Improvements to Loop
Would anyone find feature (a) outlined below (adding isFirst and isLast parameters to loop, along the lines of https://issues.apache.org/jira/browse/TAP5-205) useful? If there is any interest I will raise a ticket and people can vote on it. On Tue, 2008-11-11 at 10:55 +, Joel Halbert wrote: Hi, Thoughts please on the following enhancements to Loop: a) utility parameters/methods for isFirst and isLast iteration, maybe something like: t:loop t:parameter name=isFirst // hello! /t:paramter t:parameter name=isLast // bye! /t:paramter /t:loop b) easy access to the current index value, without having to provide your own. Although you can provide your own index, this gets messy when using inner loops, since you need to reset the inner loop index on every iteration of the outer loop. This seems like boiler plate that could be incorporated into the framework. If there are already nice patterns for doing the above please shout, if not then let us know your thoughts on making these part of the framework Rgs, Joel -- SU3 Analytics Ltd The Print House 18 Ashwin Street E8 3DL London Tel: +44 (0) 20 3051 8637 Fax: +44 (0) 20 8196 2215 Mob: +44 (0) 79 7431 0685 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]
Re: Improvements to Loop
that's nice and elegant, thanks. On Tue, 2008-11-11 at 08:43 -0800, Howard Lewis Ship wrote: If you inject the Loop component and make it a property, you can refer to loop.index, which saves you from having to create an index property. On Tue, Nov 11, 2008 at 2:55 AM, Joel Halbert [EMAIL PROTECTED] wrote: Hi, Thoughts please on the following enhancements to Loop: a) utility parameters/methods for isFirst and isLast iteration, maybe something like: t:loop t:parameter name=isFirst // hello! /t:paramter t:parameter name=isLast // bye! /t:paramter /t:loop b) easy access to the current index value, without having to provide your own. Although you can provide your own index, this gets messy when using inner loops, since you need to reset the inner loop index on every iteration of the outer loop. This seems like boiler plate that could be incorporated into the framework. If there are already nice patterns for doing the above please shout, if not then let us know your thoughts on making these part of the framework Rgs, Joel -- SU3 Analytics Ltd The Print House 18 Ashwin Street E8 3DL London Tel: +44 (0) 20 3051 8637 Fax: +44 (0) 20 8196 2215 Mob: +44 (0) 79 7431 0685 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 The Print House 18 Ashwin Street E8 3DL London Tel: +44 (0) 20 3051 8637 Fax: +44 (0) 20 8196 2215 Mob: +44 (0) 79 7431 0685 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]
Re: T5: Using an annotation to define which is the page activation context / onActivate method ?
Unfortunately PageAttached is called before onActivate methods are called, and thus no use for initialising/validating models which was my intention. On Tue, 2008-11-11 at 11:43 +, Lance Java wrote: You could use pageAttached http://tapestry.apache.org/tapestry5/tapestry-core/guide/lifecycle.html 2008/11/8 Joel Halbert [EMAIL PROTECTED] just realised that the order of invocation of onActivate methods is the other way around to that which i thought it was: http://markmail.org/message/7o52hrmcvli3jsje This does pose the question though: how can I invoke base functionality after subclasses have been initialised, but before PageRender? hmmm (being Saturday I've very likely missed something here) On Sat, 2008-11-08 at 14:40 +, Joel Halbert wrote: Hi, Is it possible to use an annotation to define which method should be used to set the page activation context? i.e. I would like to define an onActivate() method, but have it called something else, e.g. onActivateX(). A reason for wanting to do so is to ensure that i may have a single onActivate method in a base class which is always called regardless of wether there are onActivate methods in subclasses (that might otherwise override it and not call super.onActivate()). Thx Joel -- SU3 Analytics Ltd The Print House 18 Ashwin Street E8 3DL London Tel: +44 (0) 20 3051 8637 Fax: +44 (0) 20 8196 2215 Mob: +44 (0) 79 7431 0685 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 The Print House 18 Ashwin Street E8 3DL London Tel: +44 (0) 20 3051 8637 Fax: +44 (0) 20 8196 2215 Mob: +44 (0) 79 7431 0685 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]
Improvements to Loop
Hi, Thoughts please on the following enhancements to Loop: a) utility parameters/methods for isFirst and isLast iteration, maybe something like: t:loop t:parameter name=isFirst // hello! /t:paramter t:parameter name=isLast // bye! /t:paramter /t:loop b) easy access to the current index value, without having to provide your own. Although you can provide your own index, this gets messy when using inner loops, since you need to reset the inner loop index on every iteration of the outer loop. This seems like boiler plate that could be incorporated into the framework. If there are already nice patterns for doing the above please shout, if not then let us know your thoughts on making these part of the framework Rgs, Joel -- SU3 Analytics Ltd The Print House 18 Ashwin Street E8 3DL London Tel: +44 (0) 20 3051 8637 Fax: +44 (0) 20 8196 2215 Mob: +44 (0) 79 7431 0685 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]
Re: Rationale behind all possible onActivate methods invoked when context is supplied
On Mon, 2008-11-10 at 14:31 +, Peter Stavrinides wrote: The trouble is when multiple onActivate methods are required, it always requires a little more thought to get the page handling perfect. Since this pattern gets repeated a lot, you often end up with hundreds of these onActivate methods ...its a lot of boilerplate code that could be optimized. I think i would agree with that. Maybe the best way to deal with different onActivate methods is to have a single one receiving an EventContext object If it can be done this way then definitely a better solution IMHO, and less error prone too... onActivate is not 'Tapestry simple' yet. What I like most about the onActivate event concept is that you can code defensively, i.e.: the ability to return an object if you so choose. I find this useful for instance when incorrect parameters are supplied to a page you can simply return another page, instead of displaying an ugly error to the end user. The trouble is when multiple onActivate methods are required, it always requires a little more thought to get the page handling perfect. Since this pattern gets repeated a lot, you often end up with hundreds of these onActivate methods ...its a lot of boilerplate code that could be optimized. cheers, Peter Em Sat, 08 Nov 2008 13:05:50 -0300, Joel Halbert [EMAIL PROTECTED] escreveu: I'd be interested to hear how others handle this, and what the merit of having all available onActivate methods invoked is when the full context is supplied. Maybe the best way to deal with different onActivate methods is to have a single one receiving an EventContext object http://tapestry.apache.org/tapestry5/apidocs/org/apache/tapestry5/EventContext.html and then use its getCount() method to find out how many parameters were passed in the activation context. -- SU3 Analytics Ltd The Print House 18 Ashwin Street E8 3DL London Tel: +44 (0) 20 3051 8637 Fax: +44 (0) 20 8196 2215 Mob: +44 (0) 79 7431 0685 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.
T5: Page instance variable default values
Hi, With reference to: http://tapestry.apache.org/tapestry5/guide/lifecycle.html Tapestry takes special care to purge all instance variables back to their default value at the end of each request. How is the default value determined? I have noticed that if I declare a class variable on my page, like so: private HashSetString myVar = new HashSetString(); It's state will persist across requests i.e. if on one page request I populate it, the populated state will be visible to the next request, whereas I was expecting an empty Set. Is this expected, I can initialise my variable within onActivate or a @SetupRender method instead, but I want to check in to see what the documented behaviour should be. (Note that the variable has not been marked @Persist in any way, I am using 5.0.15) Rgs, Joel - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
T5: Using an annotation to define which is the page activation context / onActivate method ?
Hi, Is it possible to use an annotation to define which method should be used to set the page activation context? i.e. I would like to define an onActivate() method, but have it called something else, e.g. onActivateX(). A reason for wanting to do so is to ensure that i may have a single onActivate method in a base class which is always called regardless of wether there are onActivate methods in subclasses (that might otherwise override it and not call super.onActivate()). Thx Joel -- SU3 Analytics Ltd The Print House 18 Ashwin Street E8 3DL London Tel: +44 (0) 20 3051 8637 Fax: +44 (0) 20 8196 2215 Mob: +44 (0) 79 7431 0685 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]
Re: T5: Using an annotation to define which is the page activation context / onActivate method ?
just realised that the order of invocation of onActivate methods is the other way around to that which i thought it was: http://markmail.org/message/7o52hrmcvli3jsje This does pose the question though: how can I invoke base functionality after subclasses have been initialised, but before PageRender? hmmm (being Saturday I've very likely missed something here) On Sat, 2008-11-08 at 14:40 +, Joel Halbert wrote: Hi, Is it possible to use an annotation to define which method should be used to set the page activation context? i.e. I would like to define an onActivate() method, but have it called something else, e.g. onActivateX(). A reason for wanting to do so is to ensure that i may have a single onActivate method in a base class which is always called regardless of wether there are onActivate methods in subclasses (that might otherwise override it and not call super.onActivate()). Thx Joel -- SU3 Analytics Ltd The Print House 18 Ashwin Street E8 3DL London Tel: +44 (0) 20 3051 8637 Fax: +44 (0) 20 8196 2215 Mob: +44 (0) 79 7431 0685 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]
Rationale behind all possible onActivate methods invoked when context is supplied
Hi, I've been thinking about how onActivate methods are called... If i have a page with two onActivate methods: MyPage.onActivate(int modelId1, int modelId2); MyPage.onActivate(int modelId1, int modelId2, int modelId3); and if i have a link to this page which supplies the full 3 argument context, (e.g. http://bla.com/MyPage/1/2/3) then T5 will invoke the second method and then the first. What is the rational behind thiinvoking both onActivate methods for the same context? If onActivate methods are an opportunity to intialise models (in this case by looking up the model based on the supplied id) then having both methods invoked requires us to be defensive about initialisation, if we want to avoid unecessary model intialisation and data access: e.g. i need to write something like this in the first of the above two methods: onActivate(int modelId1, int modelId2){ if (model1 != null) { model1 = model1Dao.getById(model1Id); } if (model2 != null) { model2 = model2Dao.getById(model1Id); } } (I'm not presuming to have model caching, which i do, but this is incidental to the problem illustrated) I'd be interested to hear how others handle this, and what the merit of having all available onActivate methods invoked is when the full context is supplied. Rgs, Joel -- SU3 Analytics Ltd The Print House 18 Ashwin Street E8 3DL London Tel: +44 (0) 20 3051 8637 Fax: +44 (0) 20 8196 2215 Mob: +44 (0) 79 7431 0685 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]
Re: Rationale behind all possible onActivate methods invoked when context is supplied
i knew i was missing something, thanks! (I must try and remember what i read in the docs) On Sat, 2008-11-08 at 08:23 -0800, Martin Papy wrote: You can short cut the second call if the first method return a boolean. ( false I believe )... Martin Joel Halbert-2 wrote: Hi, I've been thinking about how onActivate methods are called... If i have a page with two onActivate methods: MyPage.onActivate(int modelId1, int modelId2); MyPage.onActivate(int modelId1, int modelId2, int modelId3); and if i have a link to this page which supplies the full 3 argument context, (e.g. http://bla.com/MyPage/1/2/3) then T5 will invoke the second method and then the first. What is the rational behind thiinvoking both onActivate methods for the same context? If onActivate methods are an opportunity to intialise models (in this case by looking up the model based on the supplied id) then having both methods invoked requires us to be defensive about initialisation, if we want to avoid unecessary model intialisation and data access: e.g. i need to write something like this in the first of the above two methods: onActivate(int modelId1, int modelId2){ if (model1 != null) { model1 = model1Dao.getById(model1Id); } if (model2 != null) { model2 = model2Dao.getById(model1Id); } } (I'm not presuming to have model caching, which i do, but this is incidental to the problem illustrated) I'd be interested to hear how others handle this, and what the merit of having all available onActivate methods invoked is when the full context is supplied. Rgs, Joel -- SU3 Analytics Ltd The Print House 18 Ashwin Street E8 3DL London Tel: +44 (0) 20 3051 8637 Fax: +44 (0) 20 8196 2215 Mob: +44 (0) 79 7431 0685 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 The Print House 18 Ashwin Street E8 3DL London Tel: +44 (0) 20 3051 8637 Fax: +44 (0) 20 8196 2215 Mob: +44 (0) 79 7431 0685 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]
Re: Making runtime Services (e.g. Request) available in a custom binding
How neat. That works a treat. On Fri, 2008-11-07 at 10:22 -0800, Howard Lewis Ship wrote: Tapestry has a Request service that is a property shadow of RequestGlobals.request. That means that you can inject Request and any method you invoke on it is forwarded to the current per-thread Request object. The end result is you can treat Request as you like ... as the current Request ... even though it is a shared global object. On Fri, Nov 7, 2008 at 10:05 AM, Joel Halbert [EMAIL PROTECTED] wrote: Hi, I want to create a binding which is dependent on data within the user session. How can runtime information such as the request/session be made available to the Binding? In other bindings I have written I have injected any services I needed into the BindingFactory - but BindingFactory is created once, when the app loads, and so can not not know about the current runtime. Thanks, Joel -- 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 The Print House 18 Ashwin Street E8 3DL London Tel: +44 (0) 20 3051 8637 Fax: +44 (0) 20 8196 2215 Mob: +44 (0) 79 7431 0685 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]
Making runtime Services (e.g. Request) available in a custom binding
Hi, I want to create a binding which is dependent on data within the user session. How can runtime information such as the request/session be made available to the Binding? In other bindings I have written I have injected any services I needed into the BindingFactory - but BindingFactory is created once, when the app loads, and so can not not know about the current runtime. Thanks, Joel -- 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]
Support for external assets ?
Hi, Can an asset reference an external resource? e.g. @IncludeJavaScriptLibrary(value={url:http://www.myurl.com/resource.js}) If it's not supported was there a reason for this? (If there's no particular reason I might raise a ticket) Thx, Joel -- 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]
Re: Support for external assets ?
Just realised that you can use: RenderSupport.addScriptLink(String url) Joel Halbert wrote: Hi, Can an asset reference an external resource? e.g. @IncludeJavaScriptLibrary(value={url:http://www.myurl.com/resource.js}) If it's not supported was there a reason for this? (If there's no particular reason I might raise a ticket) Thx, Joel -- 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]
Access to T5 Services - how to get a handle on to Registry?
Hi, I am writing a binding for looking up symbols. In my binding factory I need access to the SymbolSource service. How can you access a T5 Service within a class that is not managed by Tap IoC (thus the dependency can not be injected) and does not have access to the ServletContext (thus the dependency can not be looked up manually from the Registry (the registry is set as a servlet context parameter)) ? Thx Joel -- 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]
Re: Access to T5 Services - how to get a handle on to Registry?
OK, i figured it out, I didn;t realise you can inject services into the contribute methods: something like... public static void contributeBindingSource( MappedConfigurationString, BindingFactory configuration, BindingSource bindingSource, @InjectService(SymbolSource) SymbolSource symbolSource ) { configuration.add(list, new ListBindingFactory(bindingSource)); configuration.add(symb, new SymbolBindingFactory(symbolSource)); } (IoC on steroids !!) Joel Halbert wrote: Hi, I am writing a binding for looking up symbols. In my binding factory I need access to the SymbolSource service. How can you access a T5 Service within a class that is not managed by Tap IoC (thus the dependency can not be injected) and does not have access to the ServletContext (thus the dependency can not be looked up manually from the Registry (the registry is set as a servlet context parameter)) ? Thx Joel -- 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]
Re: T5 arguments to methods in expressions
Sounds good. With respect to expressions, although having a lot of logic in the page can quickly become unwieldy, the ability to use simple ternaries and evaluate functions with arguments is certainly appealing and allow for more concise code. Howard Lewis Ship wrote: On Mon, Oct 27, 2008 at 11:26 AM, Joel Halbert [EMAIL PROTECTED] wrote: Hi, Does T5 support arguments to methods in expressions? e.g. something like the argument to the inner loop source below: tr t:type=loop t:source=promotedRows value=var:index td t:type=loop t:source=promotedCols(${var:index})item ${var:index}/td I expect to revamp the property expression language in 5.1 (or perhaps 5.2, depending on priorities) to support this, almost. Unless I get very clever, I don't think we'll see ${var:index} allowed ... you'll have to use a real property, not a var: psuedo-property, but then it will look lke: t:source=promotedCols(index) I also expect to add some ternary operator (test ? expr1 : expr2), a smart dereference ([ expr ] that can be applied to arrays, Lists and Maps), and maybe some simple filtering / projection operators, along with method invocation. /tr Is this allowed? I ask because the above code does not throw an exception, however the promotedCols(int) method is NEVER invoked although the inner loop iterates exactly ONCE (although it should be more times). Is this behaviour is a bug? Thanks, Joel -- 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]
Re: T5: Page lifecycle method called after onActivate but before event handling and page rendering methods?
Well, typically loading model data, which I would want to do from a single place, once the onActivate method(s) had been called. Thiago H. de Paula Figueiredo wrote: Em Sun, 26 Oct 2008 11:24:52 -0300, Joel Halbert [EMAIL PROTECTED] escreveu: Is there a lifecycle method which is called after onActivate but before any of the event handling methods or page rendering methods? The answer depends on what are you trying to accomplish. :) Could you give an example or elaborate more? -- 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]
Modifying default HTML templates for form validation messages
Is it at all possible to override the default HTML templates for form validation error messages, and if so, are there any pointers on the web? Thanks, Joel -- 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]
Re: Modifying default HTML templates for form validation messages
I want to change the template itself, there is only so much I can change with the css. Ulrich Stärk wrote: What exactly are you trying to achieve? Overriding the default messages is a matter of putting a properties file into the right package in your classpath, see the wiki. Formatting should be possible using css. Uli Joel Halbert schrieb: Is it at all possible to override the default HTML templates for form validation error messages, and if so, are there any pointers on the web? Thanks, Joel - 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]
Re: Modifying default HTML templates for form validation messages
OK, thanks. Ulrich Stärk wrote: There is no such thing such as a template for error messages. The validation errors come from a ValidationDecorator that writes out all HTML. You should be able to overwrite this service with your own implementation. I never digged deeper into this so there is nothing more I can tell you. Uli Joel Halbert schrieb: I want to change the template itself, there is only so much I can change with the css. Ulrich Stärk wrote: What exactly are you trying to achieve? Overriding the default messages is a matter of putting a properties file into the right package in your classpath, see the wiki. Formatting should be possible using css. Uli Joel Halbert schrieb: Is it at all possible to override the default HTML templates for form validation error messages, and if so, are there any pointers on the web? Thanks, Joel - 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] -- 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]
Re: reference pages by logical id (rather than by path)
I like using classes, as you say it makes it re-factor proof. This is in-fact what Wicket does too. Thiago H. de Paula Figueiredo wrote: Em Sun, 26 Oct 2008 06:39:21 -0300, Joel Halbert [EMAIL PROTECTED] escreveu: Is possible to reference pages by logical id rather than by path? i.e. I would like to be able to reference a page like this: t:page=name:editimages rather than t:page=manage/inventory/images/Edit I don't think so. Other option would be the page paramameter from PageLink to also accept Class instances. We would have refactoring-proof PageLink usage. It would be something like this: t:page=prop:nextPage public Class getNextPage() { return NextPage.class; } You can easily add a new name parameter binding to do what you want. You can follow this example from the Tapestry wiki: http://wiki.apache.org/tapestry/Tapestry5HowToAddMapBindingPrefix and use a properties file to store the name/page mappings. Hurray for Tapestry flexibility! :) -- 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]
T5 arguments to methods in expressions
Hi, Does T5 support arguments to methods in expressions? e.g. something like the argument to the inner loop source below: tr t:type=loop t:source=promotedRows value=var:index td t:type=loop t:source=promotedCols(${var:index})item ${var:index}/td /tr Is this allowed? I ask because the above code does not throw an exception, however the promotedCols(int) method is NEVER invoked although the inner loop iterates exactly ONCE (although it should be more times). Is this behaviour is a bug? Thanks, Joel -- 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]
reference pages by logical id (rather than by path)
Is possible to reference pages by logical id rather than by path? i.e. I would like to be able to reference a page like this: t:page=name:editimages rather than t:page=manage/inventory/images/Edit You would of course need to maintain the mapping from logical page id to physical path, but at least this would then be done in a single place, rather than in various tml files. Cheers, Joel -- 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]
Changing the default client side CSS
Hi, Is it possible to override the default CSS that is used for client side form field validation error messages? Thx, Joel -- 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]
Re: Changing the default client side CSS
OK, that was pretty dim of me, since changing the css is as simple as overriding the css in /app/assets/5.0.15/tapestry/default.css Another question then: is it possible to change the HTML template used globally for all error messages ? Joel Halbert wrote: Hi, Is it possible to override the default CSS that is used for client side form field validation error messages? Thx, Joel -- 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]
T5: Page lifecycle method called after onActivate but before event handling and page rendering methods?
Is there a lifecycle method which is called after onActivate but before any of the event handling methods or page rendering methods? -- 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]