返回介绍

19.3.1 使用 Velocity 构建 Email 消息

发布于 2024-08-17 00:45:49 字数 2132 浏览 0 评论 0 收藏 0

Apache Velocity是由Apache提供的通用模板引擎。Velocity有挺长的历史了,并且已经应用于各种任务中,包括代码生成以及代替JSP。它还能用于格式化富文本Email消息,也就是我们在这里的用法。

为了使用Velocity对Email进行布局,我们需要将VelocityEngine装配到SpitterEmailServiceImpl中。Spring提供了一个名为VelocityEngineFactoryBean的工厂bean,它能够在Spring应用上下文中很便利地生成VelocityEngine。VelocityEngineFactoryBean的声明如下:

VelocityEngineFactoryBean唯一要设置的属性是velocityProperties。在本例中,我们将其配置为从类路径下加载Velocity模板(关于配置Velocity的更多细节,请查阅Velocity文档)。

现在,我们可以将Velocity引擎装配到SpitterEmailServiceImpl中。因为SpitterEmailServiceImpl是使用组件扫描实现自动注册的,我们可以使用@Autowired来自动装配velocityEngine属性:

现在,velocityEngine属性可用了,我们可以使用它将Velocity模板转换为String,并作为Email文本进行发送。为了帮助我们完成这一点,Spring自带了VelocityEngineUtils来简化将Velocity模板与模型数据合并成String的工作。以下是我们可能的使用方式:

为了给处理模板做准备,我们首先创建了一个Map用来保存模板使用的模型数据。在前面字符串拼接的代码中,我们需要Spitter的全名及其Spittle的文本,这里也是一样。为了产生合并后的Email文本,我们只需调用VelocityEngineUtils的mergeTemplateIntoString()方法并将Velocity引擎、模板路径(相对于类路径根)以及模型Map传递进去。

在Java代码中剩下的事情就是得到合并后的Email文本,并将其传递给helper的setText()方法:

模板位于类路径的根目录下,是一个名为emailTemplate.vm的文件,它看起来可能是这样的:

你可以看到,模板文件比前面的字符串拼接版本读起来容易多了。因此,它也更容易维护和编辑。图19.2给出了这种类型Email的一个示例。

在看到图19.2的效果后,我觉得有很多地方可以对模板进行优化从而使得Email看起来更漂亮。但是,我将它作为给读者的练习。

Velocity作为模板引擎已经存在好多年了,并且适用于很多种任务。但是,如第6章所示,一种新的模板方案正在变得日益流行。接下来,我们看一下如何使用Thymeleaf来构建Spittle Email消息。

图19.2 Velocity模板和嵌入的图片能够装扮原本单调乏味的Email

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文