我想在Java應用程序的屬性中動態替換佔位符。像動態佔位符替換java中的屬性
WelcomeMessage=Welcome Mr. {firstName} {lastName} !!!
這些firstName和LastName變量需要動態替換。我們應該使用velocity模板引擎嗎?或者還有其他的開源框架嗎?
感謝, 馬尼什
我想在Java應用程序的屬性中動態替換佔位符。像動態佔位符替換java中的屬性
WelcomeMessage=Welcome Mr. {firstName} {lastName} !!!
這些firstName和LastName變量需要動態替換。我們應該使用velocity模板引擎嗎?或者還有其他的開源框架嗎?
感謝, 馬尼什
速度是目前最好的工具。但它取決於您想用作模板的文件類型。
例如,如果您想使用MS word文檔作爲模板,那麼您必須擴展velocity classess並編寫自己的實現。
您可以使用Java類的MessageFormat類。它可以讓你做到你所要求的。
在你的情況下,下面的代碼片段必須做的伎倆,假設道具包含從您的文件加載的所有屬性。
MessageFormat.format((String) props.get("WelcomeMessage"), "First", "Last");
請注意,您的屬性文件應具有參數索引而不是命名參數,如下所示。
WelcomeMessage=Welcome Mr. {0} {1} !!!
它做的,是的,但令人費解的,它的定義使用數字佔位符而不是有意義的符號。令人驚訝的是使用多少更難。 –
編輯我的回覆,就像你在評論。:) –
速度是比較舊的和不愉快,在我看來,有更好的方法來做到這一點:
速度並不完美。不過,我認爲它的工作非常好,我可以非常推薦它。進一步瞭解工具箱概念可以非常容易地整合您自己的「模板邏輯」。它與Servlets(和Struts 1.x)有很大的整合, – Markus
與JSF 2 Java Web應用程序,將工作如下:
的src \主\ web應用\ 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>
其中一個方法是字符串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);
太沉重,太複雜 – msangel