S3相比S2感觉舒服很多,用起来确实比传统的include方便,例如之前有个项目用了之后,切换布局什么的很省事,只需要调整一下框架页面就ok了,如果是include的话就费劲了。
不过S3预定义的只有几个head、body之类的tag,有时候还会希望能够增加一些自己扩展的tag,例如 sidebar、footer之类的。
一开始看源码后,增加了个filter的继承( http://www.oschina.net/question/553849_56620 ),后来发现其实有更简单的方式,官方其实已经考虑到这种扩展了,我们只需要实现个 bundle就ok了:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
public
class
ExtHtmlTagRuleBundle
implements
TagRuleBundle {
@Override
public
void
install(State defaultState, ContentProperty contentProperty,
SiteMeshContext siteMeshContext) {
defaultState.addRule(
"myfooter"
,
new
ExportTagToContentRule(contentProperty.getChild(
"myfooter"
),
false
));
}
@Override
public
void
cleanUp(State defaultState, ContentProperty contentProperty,
SiteMeshContext siteMeshContext) {
}
}
|
如果需要添加多个,install 方法里面那行语句多复制几次就ok了。
然后在sitemesh3.xml中配置一下:
1
2
3
4
|
<!-- 增加自定义标签,目前只提供了一个 myfooter -->
<
content-processor
>
<
tag-rule-bundle
class
=
"com.someok.common.base.web.sitemesh3.ExtHtmlTagRuleBundle"
/>
</
content-processor
>
|