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

Динамическая замена замещающего объекта в свойствах java

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

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

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

Спасибо, Маниш

4b9b3361

Ответ 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 и добавить к нему каждый шаблон: