我使用Spring 3,Apache Tiles 2和Maven进行项目设置。 在我实现Tiles之前,我使用messages.properties文件来动态填充网页的标题(head和title标签之间出现的部分)。这样做的原因是为了允许未来的本地化。但是,由于我已经集成了tile,所以tiles.xml文件似乎控制着我的页面的标题。
有没有办法改变这个,所以页面标题来自我用作页面主体的每个jsp的messages.properties?
tiles.xml是:
<definition name="base.definition" template="/WEB-INF/views/layouts/layout.jsp">
<put-attribute name="title" value="" />
<put-attribute name="header" value="/WEB-INF/views/includes/header.jsp" />
<put-attribute name="menu" value="/WEB-INF/views/includes/menu.jsp" />
<put-attribute name="body" value="" />
<put-attribute name="footer" value="/WEB-INF/views/includes/footer.jsp" />
</definition>
<definition name="home" extends="base.definition">
<put-attribute name="title" value="Welcome from Tile" />
<put-attribute name="body" value="/WEB-INF/views/home.jsp" />
</definition>
<definition name="new-deal-input" extends="base.definition">
<put-attribute name="title" value="New Deal" />
<put-attribute name="body" value="/WEB-INF/views/new-deal-input.jsp" />
</definition>
如果您看到“欢迎来自平铺”或“新政”作为标题,我希望此消息来自messages.properties。我已经尝试将消息放在“正文”页面上的标题标签中无济于事。
该项目是在GitHub上设置的,您可以查看以下网址:Group-Deal-Clone
答案 0 :(得分:18)
另一种变体,没有c:set:
在tiles-defs.xml中:
<definition name="index" template="/WEB-INF/tiles/base.jsp">
<put-attribute name="title" value="home.title"/>
<put-attribute name="header" value="/WEB-INF/includes/iheader.jsp"/>
...
</definition>
base.jsp中的:
<head>
<tiles:importAttribute name="title" />
<title><spring:message code="${title}"></spring:message></title>
</head>
在messages.properties中:
home.title=Homepage title
答案 1 :(得分:10)
您可以将spring消息键添加到tiles title属性。
<definition name="home" extends="base.definition">
<put-attribute name="title" value="message.key.welcome.text" />
<put-attribute name="body" value="/WEB-INF/views/home.jsp" />
</definition>
并在jsp中使用它
<c:set var="titleKey">
<tiles:insertAttribute name="title" ignore="true" />
</c:set>
<title><spring:message key="${titleKey}" /></title>
我现在手上没有tile + spring项目,所以我无法检查语法100%是否正确,但我之前使用过这种方法。
当然,你可以做这样的事情来获得每页标题
<title><spring:message key="welcome.${titleKey}"/></title>