Apache Velocity"主要模板"?

时间:2014-09-10 22:28:11

标签: velocity template-engine

我是Apache Velocity的新手,我在确定构建模板的最佳方法时遇到了一些麻烦。在大多数指南中,我看到这些页面都是这样构建的:

#parse("header.vm")
<body>
    ...
</body>
#parse("footer.vm")

我也看到有人用这种方法接近“主”模板:

<head>
    ...
</head>
<body>
#if($activeTab=="home")
    #parse("home.vm")
#elseif($activeTab=="aboutus")
    #parse("aboutus.vm")
...and so on.
</body>

这看起来有点傻,但我猜它有用。

我经常使用Twirl,所以我可能会被宠坏,但是我想把模板注入另一个模板,最后是这样的主模板:

<head>
    ...
</head>
<body>
    $content
</body>

然后将所有其他模板写为:

#parse(main){ 
    TEMPLATE CONTENT 
}

这在Velocity中可行吗?如果是的话,这是不好的做法,如果是这样,为什么? 谢谢。

2 个答案:

答案 0 :(得分:5)

Velocity本身并不能为布局模板(您调用的主模板)提供良好的支持。但是,它们提供了一个名为Velocity Layout Servlet(VLS)的工具。

为了让您了解一下,像Rythm这样的其他模板解决方案通过template inheritance mechanismdemo)提供了非常好的模板布局管理。免责声明:我是Rythm的作者,所以我可能会有一些偏见。但是,您可以签出由第三方创建的this article,以了解不同模板解决方案的优缺点。

答案 1 :(得分:3)

您可以使用$!bodyContent变量。

mainLayout.vm:

#macro(mainLayout)
<head>
    ...
</head>
<body>
    $!bodyContent
</body>
#end

index.vm:

#@mainLayout()
  <h1>Index page</h1>
#end