SpringMVC 3和Tiles 2页面标题的本地化

时间:2011-08-04 07:39:23

标签: java apache spring tiles

我使用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

2 个答案:

答案 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>