For a long time I've been looking for a web framework that would ease the development of web UI in portlets. Pure JSP is too old-fashioned and the abstraction it provides is just too low-level. There are many good web frameworks for standard web applications (JSF/Seam, GWT, Struts 2, Wicket, you name it...) but if they include portlet support than only as an after-thought and it's usually far behind the quality and features of the standard web framework. Nobody was able to recommend me a decent portlet web framework - until recently.
First I've learned about an upcoming book Portlets in Action (preview) by Ashish Sarin, which teaches not only Portlets 2.0 (JSR 286) but also other must-haves for a real world development like a portlet web framework and Ajax (DWR in this case). You've surely already guessed that Ashish uses Spring Portlet MVC, which indicates that it must be indeed good.
Than I've been surprised to learn that my good and trustworthy collegue, Vlado, is using Spring Portlet MVC on his project. He had but positive words about the framework: "It's excellent, I wouldn't make portlets with anything else. It's enough lightweight, it helps where it should and doesn't limit you anyhow."
The only issue is that the current stable release doesn't support JSR286 yet (events, resource serving...). Fortunately the upcoming release of Spring 3.0 will support it. Spring 3.0 M3 have been released in May 2009 (more about Portlet 2.0 support on M2 release page), RC1 should have been released in June. You can learn about details in the corresponding Jira issue.
Update 2/2010: Liferay uses quite a lot Struts to build its portlets, for instance when developing a portlet as an EXT plugin (not recommanded), you can only use Struts, so Struts is surely a viable alternative. There is a discussion of Spring vs. Struts at Liferay forums (6/2009).