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!

Friday, July 27, 2007

Tapestry 5 Preview at OSCON 2007

Yesterday was my session at OSCON. 45 minutes to covert Tapestry 5? Not a hope, especially with Rod Johnson running a little long.

I got the typical stunned reaction, followed by "is it done yet? Can I use it?" People crave T5 once they see it, and the presentation I do barely scratches the surface of what it can do today.

I've converted the presentation to PDF, which is great considering I had to flash through a lot of stuff about the grid very quickly.


Massimo said...

Very nice presentation!

I hope one day to meet you, next time you come to Italy drop me a note!

Bill Holloway said...

Ooooof! I was getting to use Tapestry 5 in a big production app, and now they're telling us that we have to use JDK 1.4!


Roberto said...

Nice presentation, I loved the way you begin with ... "If I have to type one more angle bracket I'll chop off my pinkie!" ... It completly caught my attention. I'm waiting patiently for the official release of T5 ...

Ken said...

Any goals for when it'll be released? Curious if it'll be by the end of the year or mid next year since it sounds like you have quite a lot of things to add.

And I'd take what you say as a goal w/ a grain of salt (add 3 months to it ;-)

Martin said...

A solution to a very common situation is unclear to me: I have a Grid component, actionlinks on every row, as well as some (text areas and drop-down boxes) other fields and a few submit-buttons outside the Grid, but inside the Form. A bit like Gmail or Yahoo mail without the frills.

I would also like to put a checkbox beside the other row data in the Grid. (again, just like webmail). I could easily add a checkbox beside each row which would just display the boolean data in the row-data object "behind" it.

However, I don't know how to just add a checkbox to every row so I can select one or more rows that have to be processed simultaneously upon clicking one of the submit buttons. These boxes aren't really there to reflect data in the data object behind the row because they just are there to help identify rows in the context of the form processing of that particular page.

I suspect there is some way to put a "model" "behind" the form, purely to hold data within the context of processing that form.

It seems I am stuck, so any help would be greatly appreciated.

surya said...

I am looking forward for the official release. I have been browsing from past 6-7 months this site to only see the releasing soon slogan. Sorry if this sounds a bit harsh. But given the additional features you have listed and the current state, I am getting a feel that I may have to wait for another 6-7 months. Any comments ??


Craig's Blog said...

Martin - try the Tapestry mailing lists.

My 2 cents - I'm a Tapestry 4.0.2 user at the moment, but all of this T5 work is really making me consider redoing what I've already done. Took a long time to get used to Tapestry from Struts, might as well make another change before I get too stuck on a T4 mindset.

(And on a related note to the post - nice presentation)

Olivier said...

Does anyone have, or would be willing to make, a (small) tutorial/example using tapestry-hibernate?

Martin said...

As far as I can tell 5.0.5 does not support check boxes (nor textfields) inside a Grid. The issue was raised in march: ((TAPESTRY-1328) No support for form elements inside a Grid).

Has anyone been able to find a workaround for this?

Martin said...

Oh sorry, I meant writable checkboxes in a Grid. Display goes just fine until you hit submit. then I get "Failure writing parameter value of component MyRowsPage:checkbox:" In the stacktrace, Tapestry clearly attempts to update the value of the checkbox, but fails when trying to write the parameter value....

Tiffany said...

actually, we are working on the similar grid table. we would like to be able to add action "button" on each row and column order on the Grid. Is there anyway to do that?



Tiffany said...

How do you add checkbox onto grid?


Martin said...

Tiffany, I no longer have a compiling version with a checkbox, but
you can change the rendering of any cell in a Grid by overriding t:parameter as shown in the Grid screencast. Another example is when you are rendering a list of xx (blog software doesn't like html tags, so you'll have to re-intoduce them): t:parameter t:name="idCell" t:actionlink t:id="select" context="xx.id" ${xx.id} /t:actionlink
Here, a number of action links is generated, one for every xx.id
However, problems seem to arise when you render an updateable element in a grid (I have tried checkboxes and textfields), and then use these fields in a form. Tapestry does not currently seem to handle this correctly as raised in March:((TAPESTRY-1328) No support for form elements inside a Grid).

Where I needed checkboxes, I just rendered another actionlink (which I made render as an arrow) in their place. I created a void listener method (onActionFromToggle(int id)). Now when I click one, the actionlink updates the variable "behind" the row. Because the listener method is void, we return to the same page.

The biggest problem with this solution is that every time you click an actionlink (that could have been a checkbox), you generate a browser-server roundtrip.