У меня есть проект Spring MVC, в котором используются плитки Apache. Я реализовал так, чтобы заголовки можно было прочитать из источника сообщения следующим образом:
<tiles-definitions>
<definition name="some-definition" extends="public.base">
<put-attribute name="title" value="some-definition.title" cascade="true" />
</definition>
</tiles-definitions>
И в моем файле шаблона (определенном public.base
) я делаю следующее:
<title><spring:message text="" code="${title}" /></title>
Теперь это отлично работает для статических переведенных заголовков, но я также хочу поддерживать динамические заголовки, например. для отображения названия компании. Я мог бы сделать это так:
<tiles-definitions>
<definition name="some-definition" extends="public.base">
<put-attribute name="title" expression="${company.name}" />
</definition>
</tiles-definitions>
А потом просто вывести заголовок в моем шаблоне вот так: <c:out value="${title}" />
. Однако проблема в том, что мой код ломается, потому что значение атрибута title
больше не является ключом сообщения. Я хочу иметь возможность поддерживать следующие сценарии:
- Статические заголовки, например. "О нас"
- Чисто динамические заголовки, например. "${компания.название}"
- Динамические заголовки с переведенным содержанием, например. "Добро пожаловать в ${company.name}"
В идеале я мог бы использовать язык выражений в источнике сообщений, но не смог заставить его работать. Я довольно много экспериментировал с различными решениями, но не могу найти достойного. Если бы я мог использовать язык выражений в своем источнике сообщений, это было бы легко. Например, можно ли как-то сделать следующее?
some-definition.title = Hello there, ${company.name}
И в моем шаблоне:
<spring:message text="" code="some-definition.title" var="test" />
<c:out value="${test}" />
Вышеприведенное не работает, так как выводит ${company.name}
, а не фактическое содержимое переменной. Есть ли способ заставить что-то подобное работать? Или есть ли какие-либо другие способы, которыми я могу поддерживать сценарии, перечисленные выше?
Я думал о создании пользовательского тега JSTL, в котором я бы анализировал строковое выражение в простом коде Java (строка, которая была переведена), но я понял, что мне, вероятно, придется явно указать корневой объект для «замены переменной» для работы , как описано здесь. Тогда это не кажется таким динамичным решением.
Есть ли способ, которым я могу выполнить эту задачу? Любая помощь высоко ценится!