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

Теперь я могу передать любое количество шаблонов, и это прекрасно работает.

Другие вопросы по тегам