尊敬的先生/女士: $customer.CustName您的帐户余额是 $customer.AccountTotal致礼!某某装饰品公司
除了替换变量之外,象Velocity和WebMacro这类高级引擎还能做其他许多事情。它们有用来比较和迭代的内建指令(尽管比较和迭代功能是两个模板引擎之间的共同点,但它们的语法差异很大,不能完全兼容。在选择模板引擎或者更换模板引擎时,务必注意这一点)。
举一个例子。十二月份,你的老板想要向所有的客户发一个圣诞节问候的email。你可以把这个消息加入到模板,以后再删除它。但这样的话,你得在新年那一天上班工作,以便删除圣诞问候消息。
一种更好的办法是指示模板何时显示圣诞问候消息。为此,你首先要把当前的月份加入到VelocityContext:
int month = (new GregorianCalendar()).get(Calendar.MONTH); // 把month值加1,因为它从0开始计算 context.put ("month", new Integer(month+1) );
现在,你只需在模板中进行比较:
尊敬的先生/女士: $customer.CustName您的帐户余额是 $customer.AccountTotal致礼!某某装饰品公司#if ($month == 12)祝您和您的家人圣诞节快乐!#end
#if指令的作用很清楚:对一个逻辑表达式进行测试,从而决定是否在模板输出结果中包含该指令块内的内容。除了简单的等于比较之外,你还可以执行更复杂的比较,但这方面的功能都与特定的模板引擎密切关联,所以这里我不再介绍。
迭代指令和#if指令一样简单。模板引擎支持迭代Java Collections Framework的任意实现,包括Array、List和Iterator。对于JDK 1.2或者更高版本,Java的Vector和ArrayList都实现了List