web-dev-qa-db-ja.com

javaのプロパティの動的プレースホルダー置換

Javaアプリケーションのプロパティでプレースホルダーを動的に置き換えたかったのです。

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

これらのfirstNameおよびLastName変数は、動的に置き換える必要があります。速度テンプレートエンジンを使用する必要がありますか?それとも他のオープンソースフレームワークはありますか?

ありがとう、マニッシュ

23
manish

Java SEの MessageFormat クラスを使用できます。これにより、要求どおりの操作を行うことができます。

あなたの場合、小道具があなたのファイルからロードされたすべてのプロパティを含んでいると仮定して、以下のコードスニペットはトリックをする必要があります。

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

プロパティファイルには、以下のように名前付きパラメーターではなく、パラメーターのインデックスが必要です。

WelcomeMessage=Welcome Mr. {0} {1} !!!
52
Chandra Sekar

Velocityはかなり古く、不快です。私の意見では、これを行うにはより良い方法があります。

  • StringTemplate は最も単純なテンプレートエンジンであり、必要なものに十分対応できます(構文例 here を参照)。
  • すでにSpring 3を使用している場合は、これも実行できる PropertyPlaceholderHelper クラスがありますが、この1つのクラスを取得するためだけにSpringを使用することはしません。
6
skaffman

方法の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);
5
dpkcs

別のオプションは、依存関係なしで Apache FreeMarker を追加し、テンプレートを次のように定義することです。

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

Apache FreeMarker™はテンプレートエンジンです:a Javaライブラリーは、テンプレートと変更データに基づいて、テキスト出力(HTML Webページ、電子メール、設定ファイル、ソースコードなど)を生成します。テンプレートFreeMarkerテンプレート言語(FTL)で記述されています。FTLはシンプルで特殊な言語です。

StringTemplateLoader を使用して、Stringを使用してテンプレートをロードできます

stringTemplateLoaderを作成して、それに各テンプレートを追加できます。

1
user7294900

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>
0

速度は現時点で最高のツールです。ただし、テンプレートとして使用するファイルの種類によって異なります。

たとえば、MS Wordドキュメントをテンプレートとして使用する場合は、速度クラスを拡張し、独自の実装を作成する必要があります。

0
Joseph Kulandai