Tapestry is great for writing java web application hosted user interfaces. The version 4.0 with its HiveMind integration is extremely powerful. The Hivemind part of the jigsaw together with Tapestry's use of annotations encourages a clean, reusable style of coding - it took a while but i finally "got" depenendency injection. The Hivemind wiring together with EasyMock makes both unit testing and integration testing simple and very practical.
(Aside: When Tim Bray says he might have a go at writing his comments system in EE, I would heartily recommend he look at Tapestry.)
Having said that I have run up against some annoying issues.
These range from the trival:
- Can not localise a submit button
- Can not put a FieldLabel after it's component
- Finding the correct replacement (usually the service name) for deprecated methods is long winded when not specified in the JavaDoc
- The HiveMind docs are very fragmented - even now I know what I am looking for I still end up search in three different sections to find it...
There are also some other issues I ran up against in building an edit compenent for a POJO that are slightly more vexing.
- The sub-component structure of a component is fixed at compile time, and the only interface for passing info at compile time to a component is through the component's name. This means I ended up inventing a naming convention to pass information to be processed when the component specification is resolved.
- In HiveMind, the javassist integration is limited by the limited interface exported by HiveMind, and the inaccessibility of its ClassPool
I am also having problems localising a component coming from a library - but I think that is a understanding issue on how the IComponentSpecification's Location affects the message catalog resolution ...