I have to say that velocity doesn't look too good compared to Freemarker. I've been using velocity on all of my projects as of late and for one very good reason - it's fast. I don't have to wait and sit around for compile times and all that. I can get immediate results and that's something every programmer who is mucking around with the view wants. I can also make macros in about a 20th the speed as making a jsp tag too. Granted I think page views are just naturally not supported very well at all in any programming language at the moment, but this is a step forward.
However, I've been doing some pretty complex stuff in the view. Now, I don't mean I'm putting business logic in there - that's not it. I've just been making massive amounts of investment in macro libraries and I build higher-level marcos for all sorts of application-specific presentation reuse. However, Velocity just isn't any good at doing this - and I'm not even talking about large scale applications, I'm talking about a small to medium-sized but featureful project a competent developer can write in a few weeks.
I think I've hit the capabilities of Velocity and I've been stretching it quite a bit. Without named/optional parameters or even basic macro overloading, I just can't build complex views and avoid duplication at the same time very easily. It's like a pain in the ass just to add an option column, button or sub-screen for a specific listing that uses the general listing macro and so on. I have all kinds of cases where I have to do functional-oriented type checking and it's inexcusable.
Freemarker seems like the way to go. While it's probably more difficult, the end result looks to be more like html. When I saw features for unordered named, optional parameters and nested content, I realized that these features alone make it better than Velocity because they just aren't "nice" features, the are just down-right required. (
http://www.jroller.com/page/raible?a...er_vs_velocity)