有关在GAE(Java)上设置模板框架的任何教程吗?

时间:2012-01-10 18:54:25

标签: java google-app-engine velocity freemarker stringtemplate

我正在尝试使用Google App Engine上的HTML格式模板(使用Java)格式化我们的电子邮件,但就我而言,我找不到一个体面的教程来设置它。

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

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

谢谢

2 个答案:

答案 0 :(得分:3)

想出如何做到这一点。

StringTemplate的文档可能非常混乱。最新版本(版本4)与以前的版本(ST而不是StringTemplateSTGroup而不是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}}构造函数之一。

这很简单。