0

我正在尝试通过在 Google App Engine(使用 Java)上使用 HTML 格式的模板来格式化我们的电子邮件,但对于我来说,我找不到一个像样的教程来设置它。

我试过查看StringTemplate,但我找不到任何从 servlet 的上下文加载独立模板并用作格式化程序的示例。

任何人都可以帮忙吗?我愿意接受任何建议,例如 Velocity 或 FreeMarker,只要它们在 GAE 上运行。

谢谢

4

2 回答 2

4

想出了如何去做。

StringTemplate 的文档可能非常混乱。最新版本(版本 4)与以前的版本有不同的类(ST代替StringTemplateSTGroup代替StringTemplateGroup等)

它还对“antlr”有外部依赖。 按照这些说明(链接包含指向所需 jar 的链接),将“antlr”和“SimpleTemplate”jar 放在服务器上的 WEB-INF/lib 目录中。

版本 2 引入了模板“组”,据我所知,它是从 Web 服务器上的文件加载模板所必需的。

所以为了让它工作,我必须定义一个模板组文件,其内容如下,命名为emailTemplate.stg

html_format(keyToReplace1, keyToReplace2) ::= <<
<html>
<body>
  <div>
    This is $keyToReplace1$
    <br/>
    This is $keyToReplace2$
  </div>
</body>
</html>
>>

然后我必须确保我的代码可以通过相对 URL 访问该文件。这很容易通过访问浏览器中的 URL 进行测试,例如:localhost:8888/templates/emailTemplate.stg

然后,为了使用这个模板,我使用了以下代码:

STGroup g = new STGroupFile("templates/emailTemplate.stg", '$', '$');
ST emailTemplate = g.getInstanceOf("html_format");
emailTemplate.add("keyToReplace1", "value for the first key");
emailTemplate.add("keyToReplace2", "value for the second key");
String result = emailTemplate.render();
于 2012-01-11T01:06:27.337 回答
0

您可以从类路径加载模板,就像在 StringTemplate 中使用的任何其他输入流一样。

import org.antlr.stringtemplate.*;
import org.antlr.stringtemplate.language.*;

StringTemplate hello = new StringTemplate("Hello, $name$", DefaultTemplateLexer.class);
hello.setAttribute("name", "World");
System.out.println(hello.toString());

您可以查看 JavaDoc 以了解如何使用输入流加载文件/资源​​,使用.class 文件通常Class.getResourceAsString()需要位于.war 的根目录中(即根目录)。classpathdefault package/lib

将资源读入 aString并将第一个参数替换为内容,或使用Stream.StringTemplate

这真的很简单。

于 2012-01-10T18:56:16.603 回答