Динамическая замена замещающего объекта в свойствах java
Я хотел бы динамически заменить местозаполнитель в свойствах приложения Java. Как
WelcomeMessage=Welcome Mr. {firstName} {lastName} !!!
Эти переменные firstName и LastName должны быть заменены динамически. Должны ли мы использовать движок шаблона скорости для того же самого? Или есть ли какие-либо другие рамки для open source для того же самого?
Спасибо,
Маниш
Ответы
Ответ 1
Вы можете использовать класс MessageFormat Java SE. Это позволяет делать то, что вы просите.
В вашем случае нижеприведенный фрагмент кода должен сделать трюк, предполагая, что реквизит содержит все свойства, загруженные из вашего файла.
MessageFormat.format((String) props.get("WelcomeMessage"), "First", "Last");
Обратите внимание, что ваши файлы свойств должны иметь индекс параметров вместо названных параметров, как показано ниже.
WelcomeMessage=Welcome Mr. {0} {1} !!!
Ответ 2
Скорость довольно старая и неприятная, на мой взгляд, есть более приятные способы сделать это:
- StringTemplate - самый простой из движков шаблонов и достаточно хорош для того, что вам нужно (см. примеры синтаксиса здесь).
- Если вы уже используете Spring 3, у него есть класс PropertyPlaceholderHelper, который также может это сделать, но я бы не сказал, t используйте Spring, чтобы получить этот класс.
Ответ 3
Один из способов - замещающий строку:
WelcomeMessage=Welcome Mr. ${firstName} ${lastName} !!!
Map<String, String> valuesMap = new HashMap<String, String>();
valuesMap.put("firstName", "ram");
valuesMap.put("lastName", "Kumar");
StrSubstitutor sub = new StrSubstitutor(valuesMap);
String message = sub.replace(WelcomeMessage);
Ответ 4
скорость - лучший инструмент на данный момент. Но это зависит от того, какой тип файла вы хотите использовать в качестве шаблона.
Например, если вы хотите использовать MS word docs в качестве шаблона, тогда вам нужно расширить класс классификации и написать свою собственную реализацию.
Ответ 5
В веб-приложении Java с JSF 2, который будет работать следующим образом:
SRC\главной\WebApp\WEB-INF\лица-config.xml
...
<resource-bundle>
<base-name>com.mycompany.resources.messages</base-name>
<var>mytext</var>
</resource-bundle>
...
ЦСИ\главная\ресурсы\ком\MyCompany\ресурсы\сообщения\mytext.properties
WelcomeMessage = Welcome Mr. {0} {1} !!!
index.xhtml
<h:outputFormat value="#{mytext.WelcomeMessage}" >
<f:param value="#{userSessionBean.first}" />
<f:param value="#{userSessionBean.last}" />
</h:outputFormat>
Ответ 6
Другим вариантом является добавление Apache FreeMarker без зависимостей и определение шаблона как:
Welcome Mr. ${firstName} ${lastName} !!!
Apache FreeMarker ™ - это механизм шаблонов: библиотека Java для генерации текстового вывода (HTML-страницы, электронные письма, файлы конфигурации, исходный код и т.д.) На основе шаблонов и изменения данных. Шаблоны написаны на языке шаблонов FreeMarker (FTL), который является простым, специализированным языком
Вы можете использовать StringTemplateLoader для загрузки шаблона с помощью String
вы можете создать StringTemplateLoader и добавить к нему каждый шаблон: