Je voulais substituer de manière dynamique l’espace réservé dans les propriétés d’une application Java. Comme
WelcomeMessage=Welcome Mr. {firstName} {lastName} !!!
Ces variables firstName et LastName doivent être substituées dynamiquement. Devrions-nous utiliser le moteur de gabarit de vélocité pour le même? Ou existe-t-il d'autres frameworks opensource pour la même chose?
Merci, Manish
Vous pouvez utiliser la classe MessageFormat de Java SE. Cela vous permet de faire exactement ce que vous demandez.
Dans votre cas, l'extrait de code ci-dessous doit faire l'affaire, en supposant que les accessoires contiennent toutes les propriétés chargées à partir de votre fichier.
MessageFormat.format((String) props.get("WelcomeMessage"), "First", "Last");
Notez que vos fichiers de propriétés doivent avoir un index de paramètres au lieu de paramètres nommés comme ci-dessous.
WelcomeMessage=Welcome Mr. {0} {1} !!!
La vélocité est plutôt ancienne et désagréable, à mon avis, il existe de meilleures façons de le faire:
Un des moyens est le substitut de chaîne:
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);
Une autre option consiste à ajouter Apache FreeMarker sans dépendance et à définir le modèle comme suit:
Welcome Mr. ${firstName} ${lastName} !!!
Apache FreeMarker ™ est un moteur de modèle: une bibliothèque Java permettant de générer une sortie texte (pages Web HTML, courriers électroniques, fichiers de configuration, code source, etc.) en fonction de modèles et de données modifiées. Les modèles sont écrits en langage FTL (FreeMarker Template Language), un langage simple et spécialisé.
Vous pouvez utiliser StringTemplateLoader pour charger un modèle à l'aide de String
vous pouvez créer un StringTemplateLoader et y ajouter chaque modèle:
Dans une application Web Java avec JSF 2, cela fonctionne comme suit:
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\ressources\com\ma société\ressources\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>
la vélocité est le meilleur outil pour le moment. Mais cela dépend du type de fichier que vous souhaitez utiliser comme modèle.
Par exemple, si vous souhaitez utiliser des documents MS Word comme modèle, vous devez étendre la classe par vélocité et écrire votre propre implémentation.