2014-09-10 102 views
5

我对Apache Velocity非常陌生,在构建模板的最佳方式方面遇到了一些麻烦。在大多数导游的我所看到的网页已建成这样的: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> 

这似乎有点愚蠢,但我想它是有效的。

我用捻了很多,所以我可能会被宠坏,但我想注入一个模板到另一个,本质上与主模板,像这样结束了:

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

然后写每隔一个模板为:

#parse(main){ 
    TEMPLATE CONTENT 
} 

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

回答

3

您可以使用$!bodyContent变量。

mainLayout.vm:

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

index.vm:

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

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

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

+0

我发现这个GitHub库[弹簧节奏](https://github.com/greenlaw110/spring-rythm) 。这是你的吗?你会说什么状态的项目是? – surfmuggle 2015-11-29 07:48:16

+0

是的,这是我的存储库。虽然它没有被广泛使用,但我确实在一些银行项目中使用它。 – 2015-11-29 11:04:52