我正在尝试通过在 Google App Engine(使用 Java)上使用 HTML 格式的模板来格式化我们的电子邮件,但对于我来说,我找不到一个像样的教程来设置它。
我试过查看StringTemplate,但我找不到任何从 servlet 的上下文加载独立模板并用作格式化程序的示例。
任何人都可以帮忙吗?我愿意接受任何建议,例如 Velocity 或 FreeMarker,只要它们在 GAE 上运行。
谢谢
我正在尝试通过在 Google App Engine(使用 Java)上使用 HTML 格式的模板来格式化我们的电子邮件,但对于我来说,我找不到一个像样的教程来设置它。
我试过查看StringTemplate,但我找不到任何从 servlet 的上下文加载独立模板并用作格式化程序的示例。
任何人都可以帮忙吗?我愿意接受任何建议,例如 Velocity 或 FreeMarker,只要它们在 GAE 上运行。
谢谢
想出了如何去做。
StringTemplate 的文档可能非常混乱。最新版本(版本 4)与以前的版本有不同的类(ST
代替StringTemplate
,STGroup
代替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();
您可以从类路径加载模板,就像在 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 的根目录中(即根目录)。classpath
default package
/lib
将资源读入 aString
并将第一个参数替换为内容,或使用Stream
.StringTemplate
这真的很简单。