
This is mentioned in the Velocity User Guide, but not very explicitly: If you need to perform an arithmetic operation on a Velocity variable, that variable must have been created as an integer.
What this means if you're passing a HashMap of parameters to the Velocity engine is that you need to pass in an instance of the Integer class. Otherwise, the expression will evaluate to null and the variable will remain unchanged. (So if you pass the String "1" into velocity and then try to increment it in a loop, it will never change.)