Tapestry Training -- From The Source

Let me help you get your team up to speed in Tapestry ... fast. Visit howardlewisship.com for details on training, mentoring and support!

Thursday, February 22, 2007

T5 coming together rapidly

A long day today, fixing bugs, adding missing features, and otherwise getting things ready for another preview release, 5.0.2. I just re-implemented the support for line precise exception reporting (the part that shows the content of the file in error) and, with a bunch of new CSS tricks up my sleeve, it looks better than ever. At least, on Firefox it does. Somehow I'm sure the ExceptionReport page will pop up when I do the next screencast.

I also added a lot of documentation on page navigation in Tapestry 5, finally documenting exactly what event handler method return values are meaningful, and what behavior they trigger. Of course, that's extensible via service configuration contributions.

I've got many more things on my plate: there seems to be an issue with localization, at least according to one Chinese (or at least, Asian) user. I need to get cracking on nicely integrated JavaScript. I need to support dates with a date translator and some date validators. Lots of stuff related to Ajax, especially the intersection of Ajax and form support. Well, just plain lots and lots more. Joy.


kristian said...


how do you plan to integrate ajax/javascript into tapestry 5? do you have a certain concept?


Howard said...

I've got a few ideas, there's won't be script templates the way there are in T4. I think Ruby's RJS is the gold standard, but that's not quite doable in Java (!).

The big problem is addressing forms and, to a lesser degree, ensuring uniqueness of ids when re-rendering a portion of a page.

The high level goal is identify what does and does not work, and make doing the things that do work easy. Again, the hard part is when a Ajax component needs to operate inside a loop.

The general structure of T5 makes all of this easier than T4; server-side event handling (with event bubbling, etc.) is much more congruous with client-side event handling. You can define new event types easily, without having to define entirely new engine services. It easier for a Tapestry component (event handler method) to return, directly, a byte/character/markup stream without having to send redirects or do other hacks.

Just going to take some time to figure it all out :-)

Bill Holloway said...

Well, the magic of RJS is that it's very easy to inject, effectively, component properties into the javascript. Couldn't the tapestry 5 subsystem parse a .script file containing ${foo} statements?