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
Ответы
Ответ 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