Das folgende Groovy-Skript zeigt, wie man innerhalb eines Velocity-Templates Zahlen formatiert. Zum Einsatz kommt NumberTool. Die Klasse ist Bestandteil der Velocity-Tools, welche in einem eigenen Projekt gepflegt werden und ersetzt die frühere VelocityFormatter.
import org.apache.velocity.app.Velocity
import org.apache.velocity.VelocityContext
import org.apache.velocity.tools.generic.NumberTool
import org.apache.velocity.runtime.RuntimeConstants
import groovy.sql.Sql
Velocity.setProperty(RuntimeConstants.RUNTIME_LOG,
5.0%2Fdocs%2Fapi%2F”>System.getProperty("java.io.tmpdir"))
Velocity.setProperty(RuntimeConstants.RUNTIME_LOG_LOGSYSTEM_CLASS,
"org.apache.velocity.runtime.log.NullLogSystem")
def map = new 5.0%2Fdocs%2Fapi%2F”>HashMap()
def select = "select value from table"
def sql = Sql.newInstance(
"jdbc:oracle:thin:@1.2.3.4:1521:db",
"username", "password",
"oracle.jdbc.driver.OracleDriver")
sql.eachRow(select) {
map.put("nnn", it.value)
}
Velocity.init()
def context = new VelocityContext()
context.put("number", new NumberTool())
context.put("werte", map)
context.put("locale", 5.0%2Fdocs%2Fapi%2F”>Locale.GERMANY); // …oder Locale.UK
def template = """\
\$werte.nnn –> \
0.000: \$number.format(\"0.000\", \$werte.nnn, \$locale) | \
currency: \$number.format(\"currency\", \$werte.nnn, \$locale) | \
percent: \$number.format(\"percent\", \$werte.nnn, \$locale)\
"""
def writer = new 5.0%2Fdocs%2Fapi%2F”>StringWriter()
Velocity.evaluate(context, writer, "formeltext", template)
println writer.toString()