我正在尝试使用Google App Engine上的HTML格式模板(使用Java)格式化我们的电子邮件,但就我而言,我找不到一个体面的教程来设置它。
我已经尝试过查看StringTemplate,但我找不到任何从servlet的上下文加载独立模板并用作格式化程序的示例。
有人可以帮忙吗?我愿意接受任何建议,例如Velocity或FreeMarker,只要它们在GAE上运行。
谢谢
答案 0 :(得分:3)
想出如何做到这一点。
StringTemplate的文档可能非常混乱。最新版本(版本4)与以前的版本(ST
而不是StringTemplate
,STGroup
而不是StringTemplateGroup
等具有不同的类别。
它还对'antlr'有外部依赖。 Per these instructions(链接包含所需jar的链接),将'antlr'和'SimpleTemplate'jars放在服务器上的WEB-INF / lib目录中。
版本2引入了模板'groups',据我所知,从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();
答案 1 :(得分: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.getResourceAsString()
,该文件通常位于classpath
default package
使用.class文件的.war(即在/lib
的根目录中)。
将资源读入String
并将第一个参数替换为内容,或使用Stream
的{{1}}构造函数之一。
这很简单。