興味深い問題があります。RythmeEngine
Rythm テンプレート エンジンを Spring MVC アプリケーションに統合しようとしているので、ファイルをレンダリングするために呼び出す単純なビュー リゾルバーを作成しました。ただし、 を使用しようとする@extends(...)
と、エンジンは空白のレンダリングを返します。2 つのテンプレート ファイルがあります。
レイアウト.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)
rhythm.html に行がないと、期待どおりに "Hello World" がレンダリングされます。ただし、layout.html を拡張しようとすると、空白のレンダリングが発生します (つまり、出力がまったくありません)。@extends(layout)
のようなものに置き換えると@extends(layoutGooBlah)
、「名前 'layoutGooBlah' で拡張テンプレートが見つかりません」というエラー メッセージが表示されるため、layout.html ファイルを見つけていることがわかります。テンプレートが正常に動作していることはわかっていますが、出力が空白になるのはなぜですか??
編集:
興味深い現象: この行を変更すると:
eng.render(httpResponse.getWriter(), f, model);
に:
String s = eng.render(f, model);
httpResponse.getWriter().write(s);
できます。??? PrintStream
使用時に a に書き込まれないのはなぜ@extends
ですか??