嗨有没有一种方法我可以有一个基本布局,比如在表达节点see here时,在使用胡子弹簧启动时?所以我可以这样做:
基础布局:
<html>
<body>
<p>Title</p>
{{{body}}} // or similar, not sure about #
</html>
然后使用Controller的返回视图名称作为内容来呈现视图,所以外部总是相同的?
答案 0 :(得分:2)
您可以通过Mustache lambda函数执行此操作。通过本教程,我能够实现您的需求:https://spring.io/blog/2016/11/21/the-joy-of-mustache-server-side-templates-for-the-jvm#layout-abstractions-using-a-lambda
创建一个像这样的控制器建议:
@ControllerAdvice
class LayoutAdvice {
@ModelAttribute("layout")
public Mustache.Lambda layout() {
return new Layout();
}
}
class Layout implements Mustache.Lambda {
String body;
@Override
public void execute(Fragment frag, Writer out) throws IOException {
body = frag.execute();
}
}
这将使一个lambda函数名为&#34; layout&#34;可以访问您的Mustache模板。 lambda函数本身接收片段(将在布局标签内部,见下文)并将其存储在布局对象的body
字段中。这可以从布局模板中访问:
<html>
<body>
{{{layout.body}}}
</body>
</html>
文件名必须为&#34; layout.html&#34;因为我们使用了上面的@ModelAttribute("layout")
。
然后你可以通过调用lambda函数并传递一个片段来使用你的布局,片段将是你布局的主体:
{{#layout}}
<h1>Demo</h1>
<div>Hello World</div>
{{/layout}}
{{>layout}}
它将产生所需的输出:
<html>
<body>
<h1>Demo</h1>
<div>Hello World</div>
</body>
</html>