1

興味深い問題があります。RythmeEngineRythm テンプレート エンジンを 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ですか??

4

1 に答える 1