2010-02-05 12 views
20

Ho voluto sostituire dinamicamente il segnaposto in proprietà in un'applicazione java. Mi piaceSostituzione di segnaposto dinamici nelle proprietà in java

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

Queste variabili firstName e LastName devono essere sostituite dinamicamente. Dovremmo usare il motore di template Velocity per lo stesso? O ci sono altri framework opensource per lo stesso?

Grazie, Manish

risposta

0

velocità è il miglior strumento a partire da ora. Ma dipende dal tipo di file che si desidera utilizzare come modello.

Ad esempio, se si desidera utilizzare MS word docs come modello, è necessario estendere velocity classess e scrivere la propria implementazione.

+0

troppo pesante, troppo complicato – msangel

43

È possibile utilizzare la classe MessageFormat di Java SE. Ti permette di fare esattamente quello che chiedi.

Nel tuo caso lo snippet di codice seguente deve fare il trucco, supponendo che gli oggetti di scena contengano tutte le proprietà caricate dal tuo file.

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

Si noti che i file delle proprietà devono avere l'indice dei parametri anziché i parametri denominati come di seguito.

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

Lo fa, sì, tranne che inspiegabilmente, è definito usando segnaposti numerici piuttosto che simbolici significativi. Incredibile quanto più difficile da usare. –

+0

Ho modificato la mia risposta proprio come stavi commentando.:) –

6

Velocity è piuttosto vecchio e sgradevole, a mio parere, ci sono modi più belli per farlo:

  • StringTemplate è il più semplice dei motori di modello, e abbastanza buono per quello che vi serve (vedi esempi di sintassi here).
  • Se stai già utilizzando Spring 3, ha la classe PropertyPlaceholderHelper che può fare anche questo, ma io non utilizzerei Spring solo per ottenere questa classe.
+0

La velocità non è perfetta. Comunque penso che faccia il suo lavoro molto bene e posso raccomandarlo molto. Inoltre, il concetto di toolbox consente un'integrazione molto semplice della propria "logica dei modelli". E ha una grande integrazione con Servlet in generale (e Struts 1.x) – Markus

0

in un'applicazione Web Java con JSF 2, che avrebbe le seguenti caratteristiche:

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

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

src \ principali risorse \ \ com \ mycompany \ Resources \ Messaggi \ 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

Uno dei modi è stringa substitutor:

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