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.


person Richard    schedule 07.12.2017    source источник


Ответы (2)


Пытаться:

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

Вызовы шаблонов разрешаются относительно вызывающего шаблона. Запуск вызова шаблона с префиксом / сделает вызов шаблона абсолютным, чего вы и ожидаете.

person CoronA    schedule 07.12.2017

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

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

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

person Richard    schedule 08.12.2017