Подтвердить что ты не робот

SpringMVC 3 и Tiles 2 Локализация названия страницы

У меня есть настройка проекта с использованием Spring 3, Apache Tiles 2 и Maven. Перед тем, как я реализую Tiles, я использовал файл messages.properties, чтобы динамически заполнять заголовки для веб-страницы (Часть, которая появляется между заголовком и тегами заголовка). Причина этого заключалась в том, чтобы разрешить локализацию в будущем. Однако, поскольку я интегрировал плитки, файл tiles.xml, похоже, контролирует заголовки для моей страницы.

Есть ли способ изменить это, чтобы заголовок страницы получался из messages.properties для каждого jsp, который я использую как тело страницы?

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>

Если вы видите "Добро пожаловать из плитки" или "Новый курс" в качестве заголовка, я бы предпочел, чтобы это сообщение появилось из message.properties. Я пробовал помещать сообщение в теги заголовка на странице "тело" безрезультатно.

Проект настроен на GitHub, вы можете взглянуть на этот URL: Group-Deal-Clone

4b9b3361

Ответ 1

Вы можете поместить ключ сообщения пружин в атрибут 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>

У меня сейчас нет плит + spring на руках, поэтому я не могу проверить, является ли синтаксис на 100% правильным, но раньше я использовал этот подход.

И, конечно же, вы можете сделать что-то подобное, чтобы получить название страницы

<title><spring:message key="welcome.${titleKey}"/></title>

Ответ 2

Другой вариант, без c: set:

in 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