Javaアプリケーションのプロパティでプレースホルダーを動的に置き換えたかったのです。
WelcomeMessage=Welcome Mr. {firstName} {lastName} !!!
これらのfirstNameおよびLastName変数は、動的に置き換える必要があります。速度テンプレートエンジンを使用する必要がありますか?それとも他のオープンソースフレームワークはありますか?
ありがとう、マニッシュ
Java SEの MessageFormat クラスを使用できます。これにより、要求どおりの操作を行うことができます。
あなたの場合、小道具があなたのファイルからロードされたすべてのプロパティを含んでいると仮定して、以下のコードスニペットはトリックをする必要があります。
MessageFormat.format((String) props.get("WelcomeMessage"), "First", "Last");
プロパティファイルには、以下のように名前付きパラメーターではなく、パラメーターのインデックスが必要です。
WelcomeMessage=Welcome Mr. {0} {1} !!!
Velocityはかなり古く、不快です。私の意見では、これを行うにはより良い方法があります。
方法の1つは文字列代行者です。
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);
別のオプションは、依存関係なしで Apache FreeMarker を追加し、テンプレートを次のように定義することです。
Welcome Mr. ${firstName} ${lastName} !!!
Apache FreeMarker™はテンプレートエンジンです:a Javaライブラリーは、テンプレートと変更データに基づいて、テキスト出力(HTML Webページ、電子メール、設定ファイル、ソースコードなど)を生成します。テンプレートFreeMarkerテンプレート言語(FTL)で記述されています。FTLはシンプルで特殊な言語です。
StringTemplateLoader を使用して、Stringを使用してテンプレートをロードできます
stringTemplateLoaderを作成して、それに各テンプレートを追加できます。
Java JSF 2を使用するWebアプリケーションでは、次のように機能します。
src\main\webapp\WEB-INF\faces-config.xml
...
<resource-bundle>
<base-name>com.mycompany.resources.messages</base-name>
<var>mytext</var>
</resource-bundle>
...
src\main\resources\com\mycompany\resources\messages\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>
速度は現時点で最高のツールです。ただし、テンプレートとして使用するファイルの種類によって異なります。
たとえば、MS Wordドキュメントをテンプレートとして使用する場合は、速度クラスを拡張し、独自の実装を作成する必要があります。