Java/Velocity/Macro
Define and use Macro
<source lang="java">
import java.io.StringWriter; import java.io.Writer; import org.apache.velocity.Template; import org.apache.velocity.VelocityContext; import org.apache.velocity.app.Velocity; import org.apache.velocity.tools.generic.RenderTool; public class VMDemo {
public static void main(String[] args) throws Exception { Velocity.init(); Template t = Velocity.getTemplate("./src/VMDemo.vm"); VelocityContext ctx = new VelocityContext(); Writer writer = new StringWriter(); t.merge(ctx, writer); System.out.println(writer); }
}
- macro (writeTable $productList)
#set ($rowCount = 1) #foreach($product in $productList) #if ($rowCount % 2 == 0) #set ($bgcolor = "#FFFFFF") #else #set ($bgcolor = "#CCCCCC") #end <tr> <td bgcolor="$bgcolor">$product</td> <td bgcolor="$bgcolor">$product</td> </tr> #set ($rowCount = $rowCount + 1) #end
- end
- set ($products = ["one", "two", "three"])
<html>
<head> <title>Title</title> </head> <body>
</body>
</html>
</source>
Use macro to wrap HTML tags
<source lang="java">
import java.io.StringWriter; import java.io.Writer; import org.apache.velocity.Template; import org.apache.velocity.VelocityContext; import org.apache.velocity.app.Velocity; import org.apache.velocity.tools.generic.IteratorTool; public class VMDemo {
public static void main(String[] args) throws Exception { Velocity.init(); Template t = Velocity.getTemplate("./src/demo.vm"); VelocityContext ctx = new VelocityContext(); ctx.put("var", new IteratorTool()); Writer writer = new StringWriter(); t.merge(ctx, writer); System.out.println(writer); }
}
- macro( d )
<tr><td></td></tr>
- end
- d()
</source>
Velocity Macro With Parameters
<source lang="java">
import java.io.StringWriter; import java.io.Writer; import org.apache.velocity.Template; import org.apache.velocity.VelocityContext; import org.apache.velocity.app.Velocity; import org.apache.velocity.tools.generic.IteratorTool; public class VMDemo {
public static void main(String[] args) throws Exception { Velocity.init(); Template t = Velocity.getTemplate("./src/demo.vm"); VelocityContext ctx = new VelocityContext(); ctx.put("var", new IteratorTool()); Writer writer = new StringWriter(); t.merge(ctx, writer); System.out.println(writer); }
}
- macro( tablerows $color $somelist )
#foreach( $something in $somelist ) <tr><td bgcolor=$color>$something</td></tr> #end
- end
- set( $greatlakes = ["Superior","Michigan","Huron","Erie","Ontario"] )
- set( $color = "blue" )
</source>