总的来说,我会推荐SiteMesh而不是 Tiles。
这是设置 SiteMesh 3的方法
您可以将 Tiles 用于页面内模板,但将 SiteMesh 用于站点范围的模板。尽管如此...
如何让瓷砖吸得更少:
使用约定优于配置。例如,把你的定义放进去webapp/WEB-INF/tiles.xml
,就不需要告诉瓷砖它在哪里。
使用通配符:
<definition name="default" template="/WEB-INF/templates/default.jsp">
<put-attribute name="titleKey" value=""/>
<put-attribute name="body" value=""/>
</definition>
<definition name="*" extends="default">
<put-attribute name="titleKey" value="{1}.title"/>
<put-attribute name="body" value="/WEB-INF/views/{1}.jsp" />
</definition>
如果您的控制器返回视图名称index
,它将匹配定义*
,并使用 JSP 文件/WEB-INF/views/index.jsp
作为正文,并使用消息属性index.title
。
如果您的控制器返回视图名称contact-us
,它将匹配定义*
,并使用 JSP 文件/WEB-INF/views/contact-us.jsp
作为正文,并使用消息属性contact-us.title
在您的模板中,添加:
<c:set var="titleKey"><tiles:getAsString name="titleKey" /></c:set>
和
<title><spring:message code="${titleKey}"/></title>
将ReloadableResourceBundleMessageSource
bean 添加到您的 servlet 应用程序上下文中。
制作一个文件/src/main/resources/messages.properties
,内容如下:
index.title = Welcome to Acme, Inc.
contact-us.title = Contact Us