2010-02-05 13 views
20

Quería sustituir el marcador de posición dinámicamente en propiedades en una aplicación Java. ComoSustitución de marcador de posición dinámico en propiedades en java

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

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

Gracias, Manish

Respuesta

0

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

Por ejemplo, si desea utilizar MS Word Doc como plantilla, debe ampliar el nivel de velocidad y escribir su propia implementación.

+0

demasiado pesado, demasiado complicado – msangel

43

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

En su caso, el siguiente fragmento de código debe ser el truco, suponiendo que props contiene todas las propiedades cargadas desde su archivo.

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

Tenga en cuenta que los archivos de propiedades deben tener un índice de parámetros en lugar de los parámetros especificados a continuación.

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

lo hace, sí, excepto que, inexplicablemente, se define usando marcadores de posición numéricos en lugar de simbólicos significativos. Increíble cuánto más difícil es usar. –

+0

Editado mi respuesta tal como estaba comentando.:) –

6

velocidad es bastante viejo y desagradable, en mi opinión, hay maneras más agradables de hacer esto:

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

La velocidad no es perfecta. Sin embargo, creo que hace su trabajo muy bien y puedo recomendarlo mucho. Además, el concepto de caja de herramientas permite una integración muy fácil de su propia "lógica de plantillas". Y tiene una gran integración con Servlets en general (y Struts 1.x) – Markus

0

En una aplicación web Java con JSF 2, que tendría las características siguientes:

src \ Main \ webapp \ WEB-INF \ faces-config.xml

... 
    <resource-bundle> 
     <base-name>com.mycompany.resources.messages</base-name> 
     <var>mytext</var> 
    </resource-bundle> 
... 

src \ principales recursos \ \ com \ miempresa \ Resources \ Mensajes \ 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> 
1

Una de las formas es substitutor 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); 
Cuestiones relacionadas