propertysourcesplaceholderconfigurer propertysource property example context application java properties placeholder

propertysource - Sustitución dinámica de marcadores de posición en propiedades en java.



spring load properties file (6)

Quería sustituir el marcador de posición dinámicamente en propiedades en una aplicación java. Me gusta

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

Estas variables FirstName y LastName deben sustituirse dinámicamente. ¿Deberíamos usar el motor de plantillas de velocidad para el mismo? ¿O hay otros marcos de código abierto para el mismo?

Gracias manish


En una aplicación web Java con JSF 2 que funcionaría de la siguiente manera:

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>


La velocidad es bastante antigua y desagradable, en mi opinión, hay mejores maneras de hacer esto:

  • StringTemplate es el más simple de los motores de plantillas, y lo suficientemente bueno para lo que necesita (vea ejemplos de sintaxis here ).
  • Si ya está usando Spring 3, tiene la clase PropertyPlaceholderHelper que puede hacer esto también, pero no usaría Spring solo para apoderarme de esta clase.

La velocidad es la mejor herramienta a partir de ahora. Pero depende del tipo de archivo que quieras usar como plantilla.

Por ejemplo, si desea utilizar los documentos de MS Word como plantilla, debe ampliar las clases de velocidad y escribir su propia implementación.


Otra opción es agregar Apache FreeMarker sin dependencias y definir la plantilla como:

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

Apache FreeMarker ™ es un motor de plantillas: una biblioteca Java para generar resultados de texto (páginas web HTML, correos electrónicos, archivos de configuración, código fuente, etc.) basados ​​en plantillas y datos cambiantes. Las plantillas se escriben en el lenguaje de plantillas FreeMarker (FTL), que es un lenguaje simple y especializado.

Puedes usar StringTemplateLoader para cargar una plantilla usando String

puede crear un StringTemplateLoader y agregarle cada plantilla:


Puede utilizar la clase MessageFormat de Java SE. Te permite hacer exactamente lo que pides.

En su caso, el siguiente fragmento de código debe hacer el truco, asumiendo que los accesorios contienen todas las propiedades cargadas desde su archivo.

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

Tenga en cuenta que sus archivos de propiedades deben tener un índice de parámetros en lugar de parámetros nombrados como se muestra a continuación.

WelcomeMessage=Welcome Mr. {0} {1} !!!


Una de las formas es el sustituto de cadena:

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);