我有一个有趣的问题。我正在尝试将 Rythm 模板引擎集成到我的 Spring MVC 应用程序中,因此我编写了一个简单的视图解析器来调用RythmeEngine
渲染文件。但是,当我尝试使用@extends(...)
时,引擎会返回一个空白渲染。我有两个模板文件:
布局.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);
至:
String s = eng.render(f, model);
httpResponse.getWriter().write(s);
有用。???PrintStream
为什么它在使用时不会写入 a @extends
?