【问题标题】:Using Freemarker templates and the JSF 2.x resources folder for media使用 Freemarker 模板和 JSF 2.x 媒体资源文件夹
【发布时间】:2012-08-20 07:50:28
【问题描述】:
我有一个使用 Freemarker 模板发送电子邮件的 JSF 2.x 应用程序。
我的问题最好描述如下:
- 在我的 Freemarker 模板中,我指的是托管在 JSF 网站上的媒体/图像;
- 我的资源位于“jsf2.x”
resources 文件夹中;
- 当然,我不能使用 Freemarker 模板中的
<h:graphicImage library="images" name="logo.gif" ... 语法...
有人有解决办法吗?
我应该将图像附加到电子邮件中吗?
或者我应该为我的图像/媒体使用两个位置(一个公共位置,另一个在 resources 文件夹下)?
【问题讨论】:
标签:
jsf-2
resources
html-email
freemarker
template-engine
【解决方案1】:
这里好像有一些不相关的问题。
一个问题是附加图像 VS 通过电子邮件中的 URL 引用它们。我不认为这是决定的,这取决于很多事情。我说,如果图像不仅仅是装饰,而是收件人想要保留在他的邮件存档中的东西(如图表),嵌入是唯一的方法,除非您可以保证图像 URL 在数月或数年后仍然有效.如果它只是装饰......那很棘手。上次我检查时,邮件客户端默认阻止从 URL 加载图像。用户必须点击它们或其他东西才能加载它们,但也许他们可以永久启用来自发件人的图像。但是如果图像不重要,大多数用户就不会关心,也永远不会看到它们。附加图片在这方面更加防弹,但它增加了邮件的大小(不太礼貌),并增加了误报垃圾邮件的可能性(垃圾邮件发送者经常使用图片作为文本)。
另一个问题是与 JSF/FreeMarker 相关的问题。我不知道 JSF ......但除非它是一个可怕的设计,否则它必须有 Java API-s 通过它你可以获取资源 URL(如果你想在邮件中引用它),或者阅读资源(如果您想将其附加到邮件中)。然后从 FreeMarker 模板中,您可以调用已放入数据模型的对象的 Java 方法,因此您可以添加一些帮助对象,FreeMarker 可以从中获取 URL 或 base64 编码的内容。 (如果您不能/不想添加到数据模型中,您仍然可以创建 TemplateDirectiveModel 或 TemplateMethodModelEx 实现并像 <#assign resourceContentB64 = 'com.example.ResourceContentB64Directive'?new()> 一样将它们拉入。)