Just to add a little bit to what was already answered...
One thing that unpleasantly surprised me in JSF is its navigation system, borrowed from Struts. For every possible passage from page to page you need to create a navigation rule and add it to an XML configuration file. I imagine that managing such a navigation can be a real pain in a large application.
Tapestry is very different in this respect. You can tell Tapestry which page you want to see next, from any page at all, and it will be given to you. The navigation is totally effortless and simple, no preliminary configuration needed.
With components, they can be placed on a page, much like JSF components, but there is more flexibility in Tapestry. If you wish, you can make your page to be pure XHTML with only ID attributes showing where components will appear at run time.
There is a wide choice of components, both in-built and third party. One of the most amazing is the BeanEditForm: one small tag gets converted into a complete, properly styled form with its controls generated automatically and already bound to the properties of a specified bean. This form comes even with built-in input validation!
As for the tiles, Tapestry has a much simpler solution. Its custom components are very easy to create, and to make sure the pages have a common look and layout, it is a standard
pattern to create a Border (or Layout) custom component for this purpose and then wrap every page into it. This is similar to the master page in ASP.NET 2.0, but significantly simpler.