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>
Вот мой код Java с StringTemplate
:
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
шаблон, чтобы иметь возможность правильно ссылаться на шаблон подписи?
Если я поставлю Signature.st
внутри Foo
каталог, то приведенный выше код работает просто отлично, но я не могу этого сделать, так как у меня будет много шаблонов, которые будут ссылаться на Signature
шаблон.
2 ответа
Пытаться:
...
$/Signature()$
...
Вызовы шаблона разрешаются относительно шаблона вызова. Начало вызова шаблона с префиксом /
сделает вызов шаблона абсолютным - это то, что вы ожидаете.
Я понял, действительно легкий способ сделать это. У меня сейчас следующая структура каталогов:
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();
Теперь я могу передать любое количество шаблонов, и это прекрасно работает.