0

Google App Engine (Java を使用) で HTML 形式のテンプレートを使用してメールをフォーマットしようとしていますが、これを設定する方法についての適切なチュートリアルが見つかりません。

StringTemplateを調べてみましたが、スタンドアロンのテンプレートがサーブレットのコンテキストから読み込まれ、フォーマッタとして使用される例は見つかりません。

誰でも助けることができますか?GAE で動作する限り、Velocity や FreeMarker などの提案を歓迎します。

ありがとう

4

2 に答える 2

4

それを行う方法を考え出した。

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();
于 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.getResourceAsString()と、ファイルはclasspath通常、default package.warの(つまり、のルートに/lib).classファイルとともに存在する必要があります。

リソースをにString読み込んで、最初のパラメーターをコンテンツに置き換えるか、のStreamコンストラクターの1つを使用しStringTemplateます。

とても簡単です。

于 2012-01-10T18:56:16.603 に答える