Dynamic Placeholder substitution in properties in java

后端 未结 6 774
死守一世寂寞
死守一世寂寞 2020-12-01 04:49

I wanted to substitute the placeholder dynamically in properties in a java application. Like

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


        
相关标签:
6条回答
  • 2020-12-01 05:10

    Velocity is rather old and unpleasant, in my opinion, there are nicer ways to do this:

    • StringTemplate is the simplest of the template engines, and good enough for what you need (see syntax examples here).
    • If you're already using Spring 3, it has the PropertyPlaceholderHelper class which can do this also, but I wouldn't use Spring just to get hold of this one class.
    0 讨论(0)
  • 2020-12-01 05:16

    velocity is the best tool as of now. But it depends on what file type you want to use as a template.

    For example, if you want to use MS word docs as template, then you have to extend velocity classess and write your own implementation.

    0 讨论(0)
  • 2020-12-01 05:19

    Another option is adding Apache FreeMarker with no dependencies and define template as:

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

    Apache FreeMarker™ is a template engine: a Java library to generate text output (HTML web pages, e-mails, configuration files, source code, etc.) based on templates and changing data. Templates are written in the FreeMarker Template Language (FTL), which is a simple, specialized language

    You can use StringTemplateLoader to load template using String

    you can create a StringTemplateLoader and add each template to it:

    0 讨论(0)
  • 2020-12-01 05:22

    One of the way is string 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);
    
    0 讨论(0)
  • 2020-12-01 05:24

    You can use the MessageFormat class of Java SE. It allows you to do exactly what you ask for.

    In your case the below code snippet must do the trick, assuming props contains all the properties loaded from your file.

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

    Note that your properties files should have index of parameters instead of named parameters as below.

    WelcomeMessage=Welcome Mr. {0} {1} !!!
    
    0 讨论(0)
  • 2020-12-01 05:28

    In a Java web application with JSF 2 that would work as follows:

    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 讨论(0)
提交回复
热议问题