如何在小胡子中使用弹簧靴的基础布局?

时间:2015-12-05 22:29:23

标签: spring-boot mustache

嗨有没有一种方法我可以有一个基本布局,比如在表达节点see here时,在使用胡子弹簧启动时?所以我可以这样做:

基础布局:

<html>
   <body>
   <p>Title</p>
   {{{body}}} // or similar, not sure about #
</html>

然后使用Controller的返回视图名称作为内容来呈现视图,所以外部总是相同的?

1 个答案:

答案 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>