Динамическое Подстановка Заполнителя в свойствах в Java - PullRequest
22 голосов
/ 05 февраля 2010

Я хотел динамически подставлять заполнитель в свойствах Java-приложения. Нравится

 WelcomeMessage=Welcome Mr. {firstName} {lastName} !!!

Эти переменные firstName и LastName необходимо динамически подставлять. Должны ли мы использовать шаблон скорости двигателя для того же? Или есть какие-то другие фреймворки с открытым исходным кодом для того же?

Спасибо, Manish

Ответы [ 6 ]

49 голосов
/ 05 февраля 2010

Вы можете использовать MessageFormat класс Java SE. Это позволяет вам делать именно то, что вы просите.

В вашем случае приведенный ниже фрагмент кода должен сработать, предполагая, что props содержит все свойства, загруженные из вашего файла.

MessageFormat.format((String) props.get("WelcomeMessage"), "First", "Last");

Обратите внимание, что ваши файлы свойств должны иметь индекс параметров вместо именованных параметров, как показано ниже.

WelcomeMessage=Welcome Mr. {0} {1} !!!
6 голосов
/ 05 февраля 2010

Скорость довольно старая и неприятная, на мой взгляд, есть более приятные способы сделать это:

  • StringTemplate - самый простой из шаблонизаторов и достаточно для того, что вам нужно (см. Примеры синтаксиса здесь ).
  • Если вы уже используете Spring 3, у него есть класс PropertyPlaceholderHelper , который может сделать это также, но я бы не стал использовать Spring только для того, чтобы получить этот единственный класс.
5 голосов
/ 13 июня 2017

Одним из способов является строковый заменитель:

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);
1 голос
/ 04 сентября 2018

Другой вариант - добавить Apache FreeMarker без каких-либо зависимостей и определить шаблон как:

Welcome Mr. ${firstName} ${lastName} !!!

Apache FreeMarker ™ - это движок шаблонов: библиотека Java для генерации текстового вывода (веб-страницы HTML, электронная почта, файлы конфигурации, исходный код и т. Д.) На основе шаблонов и изменяющихся данных. Шаблоны написаны на языке шаблонов FreeMarker (FTL), который является простым специализированным языком

Вы можете использовать StringTemplateLoader для загрузки шаблона с использованием String

Вы можете создать StringTemplateLoader и добавить в него каждый шаблон:

0 голосов
/ 04 мая 2014

В веб-приложении Java с JSF 2, которое будет работать следующим образом:

ЦСИ \ главная \ 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>
0 голосов
/ 05 февраля 2010
Скорость

- лучший инструмент на данный момент. Но это зависит от того, какой тип файла вы хотите использовать в качестве шаблона.

Например, если вы хотите использовать документы MS Word в качестве шаблона, вам нужно расширить класс скорости и написать собственную реализацию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...