Any tutorials on setting up a templating framework on GAE (Java)?

北慕城南 提交于 2019-12-11 20:13:02

问题


I'm trying to format our emails by using HTML-formatted templates on Google App Engine (using Java), but for the life of me I cannot find a decent tutorial for how to set this up.

I've tried looking at StringTemplate, but I cannot find any examples where a stand-alone template is loaded from a servlet's context and used as a formatter.

Can anyone help? I'm open to any suggestions, such as Velocity or FreeMarker, so long as they run on GAE.

Thanks


回答1:


Figured out how to do it.

The documentation for StringTemplate can be very confusing. The latest version (version 4) has different classes than previous versions (ST instead of StringTemplate, STGroup instead of StringTemplateGroup, etc)

It also has an external dependency on 'antlr'. Per these instructions (link contains links to jars needed), put the 'antlr' and 'SimpleTemplate' jars in the WEB-INF/lib directory on the server.

Version 2 introduced template 'groups', which as far as I can tell, are required for loading a template from a file on a web server.

So to get it working, I had to define a template group file, with the following content, named emailTemplate.stg

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

I then had to ensure this file was accessible by my code via a relative URL. This is easily testable by going to the URL in the browser, such as at: localhost:8888/templates/emailTemplate.stg

Then, to use this template, I used the following code:

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();



回答2:


You can load templates from the class path just like any other input stream to use in 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());

you can look at the JavaDoc to see how to load a file/resource using an input stream, using Class.getResourceAsString(), the file needs to be on the classpath usually in the default package of your .war ( ie in the root of /lib ) with the .class files.

Read the resource into a String and substitute the first paramater with the contents, or use one of the Stream constructors of StringTemplate.

It is really simple.



来源:https://stackoverflow.com/questions/8808843/any-tutorials-on-setting-up-a-templating-framework-on-gae-java

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!