2017-12-07 6 views
1

のファイルを使用する:ここでJavaのStringTemplate私はこのようなディレクトリ構造を持って外のディレクトリから

Templates/ 
├── Foo/ 
│ ├── Foo.st 
├── Signature.st 

Foo.stは次のようになります。

<?xml version="1.0" encoding="UTF-8"?> 
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> 
<head> 
</head> 
<body> 
    <div id="body"> 
     <p> Some Text </p> 
    </div> 
    $Signature()$ 
</body> 
</html> 

ここStringTemplateと私のJavaコードです:

STRawGroupDir dir = new STRawGroupDir("Templates", '$', '$'); 
ST st = dir.getInstanceOf("Foo/Foo"); 
System.out.println(st.render()); 

出力は

です
<?xml version="1.0" encoding="UTF-8"?> 
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> 
<head> 
</head> 
<body> 
    <div id="body"> 
     <p> Some Text </p> 
    </div> 
</body> 
</html> 

Fooテンプレートが署名テンプレートを正しく参照できるようにするにはどうすればよいですか?

FooディレクトリにSignature.stを入れると、上記のコードは正常に機能しますが、Signatureテンプレートを参照するテンプレートが多数あるため、これを行うことはできません。

答えて

2

試してみてください。

... 
$/Signature()$ 
... 

テンプレートの呼び出しは、呼び出し元のテンプレートに関連して解決されています。プレフィックス/でテンプレート呼び出しを開始すると、テンプレート呼び出しが絶対に行われます。これは期待どおりです。

0

私はこれを行う簡単な方法を考え出しました。私は今、次のディレクトリ構造を持っている:

Templates/ 
├── Foo/ 
│ ├── Foo.st 
├── Main.st 
├── Signature.st 

は、ここに私のMain.st

$ templates : { template | 
$(template)()$ 
}$ 

$Signature()$ 

だとここに私のJavaコードは次のとおりです。

STRawGroupDir dir = new STRawGroupDir("Templates", '$', '$'); 
ST st = dir.getInstanceOf("Main"); 
st.add("templates", Arrays.asList("/Foo/Foo.st")); 
st.render(); 

今私は、テンプレートの任意の数に渡すことができ、これは動作します完全に。

関連する問題