使用@extends时输出空白Rythm

时间:2014-02-21 15:12:59

标签: java spring-mvc template-engine rythm

我有一个有趣的问题。我正在尝试将Rythm模板引擎集成到我的Spring MVC应用程序中,因此我编写了一个简单的视图解析器,它调用RythmeEngine来呈现文件。但是,当我尝试使用@extends(...)时,引擎会返回一个空白渲染。我有两个模板文件:

的layout.html

<!DOCTYPE html>
<html>
<head>
    <title>Rythm Sandbox</title>
</head>
<body>
    <h1>Welcome!</h1>
    @render()
</body>
</html>

rhythm.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);

问题

问题在于:如果没有rhythm.html中的@extends(layout)行,我会按预期获得渲染“Hello World”。但是,当我尝试扩展layout.html时,它会导致空白渲染(即根本没有输出)。我知道它找到了layout.html文件,因为如果我用@extends(layout)替换@extends(layoutGooBlah),则错误消息显示“无法按名称找到扩展模板'layoutGooBlah'”。所以我知道它发现我的模板很好,但为什么输出是空白的?

编辑:

有趣的现象:当我改变这一行时:

eng.render(httpResponse.getWriter(), f, model);

要:

String s = eng.render(f, model);
httpResponse.getWriter().write(s);

有效。 ???使用PrintStream ??

时,为什么不写入@extends

1 个答案:

答案 0 :(得分:1)

API engine.render(writer,...)是错误的。见https://github.com/greenlaw110/Rythm/issues/201

BTW,我建议您使用http://github.com/greenlaw110/spring-rythm作为spring MVC应用程序