Keeping simple things simple is one of the reasons I'm using Tapestry for my application.
I was ready to drop Java for my next project. I intended to still use it on the backend, but have ASP for the presentation layer. The fact is, implementing a good JSP solution has become an incredible amount of work, even when using Struts.
One of the things I've come to realize is JSP is a horrible standard. Mostly because they want to be like ASP, but they also compile into Servlets. This is the sort of bastard standard the Java community doesn't need.
Tapestry allowed me to keep everything in Java, at least where it's important to me. I write the pages in HTML with 'hooks' into the framework. Page specifications are done in XML. ALL of the backend code is Java. It seems too good to be true, but it works. The learning curve is steep, documentation is still being written for it. However, I have found that the more I play with it, the easier it gets. Building components is a snap. Throwing out a simple page with some basic functionality is not the headache it used to be. It truly understands the concept of "reusable"
I don't blame Sun of JSF for unnecessary complexity, because that seems to be the way of the entire community. It seems to me that too many Java developers pride themselves in how many levels of complexity they can add to their projects. How many design patterns and how many technologies seems to be how they measure success.
I'm trying to get "back to basics" with my design. Use design patterns where they make sense, avoid anti-patterns as much as possible. Keep the applications as simple as possible while compromising on functionality as minimally as possible. With my current design using Tapestry, I can load up HTML templates in most HTML IDE's, including WYSIWYG editors, and any user familiar with HTML can edit them. A promise we've had with JSP's that I have yet to see delivered in over 4 years of JSP development.
I sure hope this fascination with complexity is going to end soon.