У меня есть интересная проблема. Я пытаюсь интегрировать механизм шаблонов Rythm в свое приложение Spring MVC, поэтому я написал простой преобразователь представления, который вызывает RythmeEngine
для рендеринга файлов. Однако, когда я пытаюсь использовать @extends(...)
, движок возвращает пустой рендер. У меня есть два файла шаблона:
layout.html
<!DOCTYPE html>
<html>
<head>
<title>Rythm Sandbox</title>
</head>
<body>
<h1>Welcome!</h1>
@render()
</body>
</html>
ритм.html
@extends(layout)
Hello World!
Я вызываю RythmEngine
следующим образом:
RythmEngine eng = RythmEngineFactory.getEngine();
File f = new File(someRootPath + name + ctx.getSuffix());
resp.setContentType("text/html");
eng.render(httpResponse.getWriter(), f, model);
И RythmEngineFactory.getEngine()
возвращает синглтон RythmEngine
со следующей конфигурацией:
Map<String, Object> props = new HashMap<String, Object>();
props.put("engine.mode", "dev");
props.put("home.template.dir", myTemplateRootDirectoryPath);
return new RythmEngine(props);
Проблема
Вот проблема: без строки @extends(layout)
в ритме.html я получаю визуализацию «Hello World», как и ожидалось. Однако, когда я пытаюсь расширить layout.html, это приводит к пустому рендерингу (т. е. вообще никакого вывода). Я знаю, что он находит файл layout.html, потому что, если я заменю @extends(layout)
чем-то вроде @extends(layoutGooBlah)
, появится сообщение об ошибке «Не удается найти расширенный шаблон по имени 'layoutGooBlah'». Итак, я знаю, что он находит мой шаблон в порядке, но почему вывод будет пустым??
Редактировать:
Интересное явление: когда я меняю эту строку:
eng.render(httpResponse.getWriter(), f, model);
To:
String s = eng.render(f, model);
httpResponse.getWriter().write(s);
Оно работает. ??? Почему он не записывает в PrintStream
при использовании @extends
??