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

Ali*_*Ali 12 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>
Run Code Online (Sandbox Code Playgroud)

如果您看到"欢迎来自平铺"或"新政"作为标题,我希望此消息来自messages.properties.我已经尝试将消息放在"正文"页面上的标题标签中无济于事.

该项目是在GitHub上设置的,您可以查看以下URL:Group-Deal-Clone

Dim*_*ima 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>
Run Code Online (Sandbox Code Playgroud)

在base.jsp中:

<head>
 <tiles:importAttribute name="title" />
 <title><spring:message code="${title}"></spring:message></title>
</head>
Run Code Online (Sandbox Code Playgroud)

在messages.properties中:

home.title=Homepage title
Run Code Online (Sandbox Code Playgroud)


Tim*_*mii 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>  
Run Code Online (Sandbox Code Playgroud)

并在jsp这样的东西中使用它

     <c:set var="titleKey">
        <tiles:insertAttribute name="title" ignore="true" />
    </c:set>
    <title><spring:message key="${titleKey}" /></title>
Run Code Online (Sandbox Code Playgroud)

我手上没有tile + spring项目所以我无法检查语法100%是否正确但我之前使用过这种方法.

当然,你可以做这样的事情来获得每页标题

<title><spring:message key="welcome.${titleKey}"/></title>
Run Code Online (Sandbox Code Playgroud)