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!

Wednesday, May 07, 2008

Improvements to the Tapestry 5 Tutorial

I spent some time yesterday revamping the Tapestry 5 Tutorial; you can see the updates at the nightly build site.

In short order we turned the Address object into a Hibernate entity, and stored it in a MySQL database, then used a Grid to show the added Addresses. Later improvements to the Tutorial will show editting and removal of Addresses.

I think the correct reaction to this would be "Dude, where's my code?". The application code for this app is so small you'd think something was missing. But that's what's Tapestry is all about ... providing the structure so that the framework can do the busy work.

I also updated some of the existing screen shots to show the "error bubbles" style of client-side validation that's been in T5 for quite some time.

People have been pining for a 5.0.12 release, but I'm glad I've been holding it back; I've been having a chance to fix bugs, and finding many annoyances as I work on a client project. Working in earnest on a project is always the best way to find the rough edges, and the end result is much more polished.

I think I must be a harsher critic of Tapestry than most; I frequently add bugs along the lines of "when I screw up, Tapestry should tell me how to fix it".


emrah said...

I want to thank you sooo much for creating Tapestry 5. It is just great :)

Mike said...

The second form page (http://tapestry.formos.com/nightly/tapestry5/tutorial1/forms2.html), which is presumably the one with the hibernate stuff, is empty. It's served with no content (0 bytes).

Howard said...

Ooops. Thanks for the heads up, I've corrected it and it will rebuild tonight.

Doug said...

Why oh why do I keep coming back here and making myself depressed at the really cool tool I could be using instead of WebLogic + Beehive. Gotta get me a Tapestry job....

I know it might be a bit of work to do it, but it'd be nice to see the screencasts updated as some of those are very old. They make an invaluable resource to be able to show people what can be done. But the most recent one is over a year old, and I'm sure would look so much better with the latest version.

Howard said...

I couldn't agree more about a screen cast, and I think one that shows off some of the fun Ajax features would be great.

Next week my schedule opens up and that's on my list of things to work on.

Ken said...

Glad to see you're shaking down Tapestry w/ customer apps. The worse thing that could happen is a bunch of backwards incompatible APIs between 5.0.12 and previous 5.0.x versions :-P

Justin Beck said...

I've been using Tapestry since the 3.0.x days and have loved it over Struts.

Tapestry 4 was an improvement over 3 and, from what I've seen, 5 is an improvement over 4. I especially love the annotations.

I'm concerned, however, that taking so long to release this version will effect how strong a following Tapestry continues to have - Howard can you comment on that?

Howard said...

What slowed down T5 for half of 2007 was me working for Feature50, where I wasn't doing Tapestry work. What's slowing it down now is me working on a T5 client project, which is really great for Tapestry in terms of making sure everything really works well together. My share of the client project is almost over, and I'll be full time on finishing T5 starting within the next few days.

akochnev said...

As I promised at NFJS, here's some T5 content (http://www.troymaxventures.com/2008/05/tapestry5-netbeans-quickstart.html) that might be relevant to the Tapestry tutorial (it seems to be quite Eclipse centric, and it seems like NetBeans can have a better story there, especially for newcomers).

Merlyn Albery-Speyer said...

Nice tutorial (with images too)!

Hey, if you're using Groovy where do all the getter annotations go? (e.g. @NonVisual and @Validate("required"))

Assuming your Groovy class looks like this:

class Address
@GeneratedValue(strategy = GenerationType.IDENTITY)
Long id

Honorific honorific

String firstName

String lastName

String street1

String street2

String city

String state

String zip

String email

String phone
} // yes, no explicit getters or setters

blogput said...


Your work on Tapestry is truly amazing.

I know that you are a very busy guy, but I am having some issues with the forms tutorial. It fails to run with latest stable jetty, when I start it using run jetty run on Eclipse.

Render queue error in BeginRender[Index:pagelink]: java.lang.ClassNotFoundException: caught an exception while obtaining a class file for org.apache.tapestry5.corelib.components.Form

It would be highly appreciated if you would have the time to update the tutorial to work with run jetty run, or give tips how to get it working, because jetty launcher is now obsolete. We'd really love to start to use Tapestry.

furzkoeter said...

Just getting started with T5.. looks awesome so far.

One thing in the tutorial confuses me a bit, you say "Also, it isn't an error if a request never matches an event handler." in the Hi/Lo section.
However, I get an exception if I omit the event handler:
Request event 'action' (on component Start:actionlink) was not handled; you must provide a matching event handler method in the component or in one of its containers.

Howard said...

I'm working onte and up-to date and more detailed tutorial. It's going to be "live" on the Wiki rather than solidified as part of the site documentation.

Celio said...

Hi Howard, I'm still new to Tapestry but I wanted to say thanks for creating it!! I've seen the integration between Tapestry and Hibernate, but I couldn't find anything about ToplinkEssentials neither Eclipselink. Do you see any possibility for them to be integrated as well ? Anyway congratulations for this great tool.