快速业务通道

用Java程序生成文本的捷径 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-25
供。虽然我在本文例子中使用Velocity,你可以方便地把这些例子移植到不同的模板引擎,只需遵照目标引擎的语法即可。

我们来看看用Velocity完成的email程序例子。要编译和运行修改后的程序,你必须下载Velocity并把它加入到classpath。如果要让email部分也能正常运行,你还需要JavaMail。

for (int i=0; i<customers.size(); i++) { Customer customer = (Customer)customers.get(i); // 创建一个环境,并加入所有的对象 VelocityContext context = new VelocityContext(); context.put ("CustName",customer.getCustName()); context.put ("total", new Double (customer.getAccountTotal())); context.put ("customer", customer ); // 解析模板,生成结果字符串 StringWriter message = new StringWriter(); template.merge(context, message); // 发送email mm.sendMail (customer.getFirstName(), customer.getEmail(), "Account", message.toString()); }

首先,你应该理解上面的Java源代码。这里我们不再象第一个例子那样生成文本,上面的代码引用一个称为“Velocity模板”的文本文件,然后把结果发送给收件人。Velocity模板可以是任何文本文件,但一般它包含一些用来插入动态内容的指令。

和VelocityContext相关的部分是上述代码中最值得注意的地方。VelocityContext提供了Java程序和Velocity文本模板之间的连接,而Velocity文本模板可以由其他人来编写。在模板中,所有加入到VelocityContext的对象都可以通过put()方法第一个参数指定的名字访问。为了解其工作过程,请看下面的模板文件:

尊敬的先生/女士:$CustName 您的帐户余额是 $total 致礼! 某某装饰品公司

Velocity引擎读取模板文件时,它直接输出文件中所有的文本,但以$字符开头的除外。$符号标识着一个位置,在模板的输出结果中,对象的值应该插入到$符号所指示的位置。例如,Java代码中有一个context.put ("CustName",customer.getCustName())语句,当Velocity模板引擎解析并输出模板的结果时,模板中所有出现$CustName的地方都将插入客户的名字;即,被加入到VelocityContext的对象的toString()方法返回值将替代Velocity变量(模板中以$开头的变量)。

模板引擎中最强大、使用最频繁的功能之一是它通过内建的映像(Reflection)引擎查找对象信息的能力。这个映像引擎允许用一种方便的Java“.”类似的操作符,提取任意加入到VelocityContext的对象的任何公用方法的值,或对象的任意数据成员。映像引擎还带来了另外一个改进:快速引用JavaBean的属性。使用JavaBean属性的时候,我们可以忽略get方法和括号(欲知详细信息,请参考模板引擎的说明文档)。请看下面这个模板的例子。由于在前面的Java代码示例中,我把Customer对象加入到了VelocityContext,所以我可以把模板改写成下面这种形式:

尊敬的先生/女士:$customer.CustName 您的帐户余额是 $customer.AccountTotal 致礼! 某某装饰品公司

用Java程序生成文本的捷径(3)

时间:2009-11-09 仙人掌工作室

除了替换变量之外,象Velocity和WebMacro这类高级引擎还能做其他许多事情。它们有用来比较和迭代的内建指令(尽管比较和迭代功能是两个模板引擎之间的共同点,但它们的语法差异很大,不能完全兼容。在选择模板引擎或者更换模板引擎时,务必注意这一点)。

举一个例子。十二月份,你的老板想要向所有的客户发一个圣诞节问候的email。你可以把这个消息加入到模板,以后再删除它。但这样的话,你得在新年那一天上班工作,以便删除圣诞问候消息。

一种更好的办法是指示模板何时显示圣诞问候消息。为此,你首

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号