I am about to ramp up a major project, the fusion of multiple familiar concepts, under a single, simple, modern, unified technology base. It will built upon established, open source toolkits and frameworks (Tomcat, Spring, Hibernate, etc) as, once it gains some depth, will be open source also. My problem is the domain abstractions (Logic, DAO, Platform services) are easily separated from implementation concerns, where the bulk of my work is in presentation tier. With an eye toward the future, like many of you, I can't decide on a direction.

I have built a dozen or more Struts applications, and know the ropes. As close to current de-facto as you are gonna get.

3 Tapestry applications, a wonderful toolkit with limited adoption.

2 JSF applications, enough to know it's quirks and limitations, but heading to be the dominant player one it matures and plays well with JSP/JSTL.

Each is a large investment in time and resources, which I would rather not replace to meet the needs/expectations of the masses in the not too distant future.

If your timeframe was a year out, but starting now, which way would you lean?