Velocity 模板引擎在复杂邮件业务中的简单举例

        Velocityapache组织下的一个基于java模板引擎(template engine),而这种Apache velocity 模板引擎的简单使用可以更好的将样式设计和java开发分离开来。


       举个简单例子,在给一些客户发送邮件时,邮件正文往往带有一些较规范的表格或链接,而在发送邮件时,我们当然可以在java代码中写正文时加入html标签修饰达到如下目的:


        但如果在业务上遇到更为复杂,项目较为庞大,这就要求项目组分工较为明确,而此时的邮件开发人员(java开发)对表单设计并不在行,换句话说java开发人员在开发邮件发送功能时即便花费较长时间用在利用html标签来修饰邮件正文内容,但其也很难达到专业的Web designers设计出来的水平。那么最能达到用户要求的方式是什么呢?是让每个人仅作自己最擅长的事情:java开发人员仅作邮件功能,web designer仅作邮件的类似web表单的正文。


       上面所示的邮件中的表格(table)及其中的样式和连接(<a></a>)效果是web designer使用html实现的一个模板,而java开发人员则提供了相关表格(table)单元格填充所需要的内容,模板引擎利用模板语言将两者进行完美结合,最终形成一个美观邮件内容。Velocity则提供了这种方式的实现,如下图所示:

         Velocity提供的这种方式的实现,其思想来源于MVCWeb designer设计好一个模板,里面使用html标签和模板语言(Velocity Template Language),而velocity模板引擎起到了控制作用,java开发人员只需要将相关数据作为一个map或其他变量等信息提供给这个模板,即可完成相关工作。代码示意如下所示:


模板:templateDemo.vm

</head>
<center>
<TABLE width=850 border=1 bordercolor="#000000" id="tabID">
	<TBODY align="left">
		<TR rowspan="2">
			<TD colSpan=4><B><FONT color=blue>$map.get("applyFormId")</FONT></B></TD>
		</TR>
		<TR>
			<TD align=middle colSpan=4><FONT size=5><B>templateDemo</B></FONT></TD>
		</TR>
		<TR>
			<TD nowrap width="140"><B>标题:</B></TD>
			<TD> $map.get("Name")</TD>
			<TD nowrap><B>关键词</B></TD>
			<TD> $map.get("key")</TD>
		</TR>
	</TBODY>
</TABLE>
</center>
</html>

 

VelocityEngine的使用

VelocityEngine ve = new VelocityEngine();
ve.setProperty(Velocity.RESOURCE_LOADER, "class");
ve.setProperty("class.resource.loader.class", "org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader"); // 设置类路径加载模板
ve.setProperty(Velocity.INPUT_ENCODING, "utf-8");// 设置输入字符集
ve.setProperty(Velocity.OUTPUT_ENCODING, "utf-8");// 设置输出字符集
ve.init();// 初始化模板引擎
Template t = ve.getTemplate("/templateDemo.vm");// 加载模板,相对于classpath路径
VelocityContext context = new VelocityContext();

HashMap<String, Object> result = new HashMap<String, Object>();
result.put("Name", "模板");
result.put("Key", "语言");

context.put("map", result);

StringWriter writer = new StringWriter();
t.merge(context, writer); // 转换
writer.toString();	//形成最终结果

 

       虽然模板引擎不仅仅使用在复杂的邮件内容的业务上,但这个简单例子让我们体会到了界面和业务数据分离的实现方式,这也是模板引擎的主要作用,即它可以让界面与数据分离,从而大大提高开发效率,也使得项目更加容易重用优良的界面设计。

 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值