关键词:
【中文标题】java中属性中的动态占位符替换【英文标题】:Dynamic Placeholder substitution in properties in java 【发布时间】:2011-01-13 10:05:06 【问题描述】:我想在 java 应用程序的属性中动态替换占位符。喜欢
WelcomeMessage=Welcome Mr. firstName lastName !!!
这些 firstName 和 LastName 变量需要动态替换。我们应该使用速度模板引擎吗?或者还有其他相同的开源框架吗?
谢谢, 马尼什
【问题讨论】:
【参考方案1】:velocity 是目前最好的工具。但这取决于您要用作模板的文件类型。
例如,如果您想使用 MS word 文档作为模板,那么您必须扩展速度类并编写自己的实现。
【讨论】:
太重,太复杂【参考方案2】:您可以使用 Java SE 的 MessageFormat 类。它可以让你完全按照你的要求去做。
在您的情况下,假设 props 包含从您的文件中加载的所有属性,下面的代码 sn-p 必须做到这一点。
MessageFormat.format((String) props.get("WelcomeMessage"), "First", "Last");
请注意,您的属性文件应该有参数索引而不是命名参数,如下所示。
WelcomeMessage=Welcome Mr. 0 1 !!!
【讨论】:
确实如此,是的,只是莫名其妙的是,它是使用数字占位符而不是有意义的符号占位符定义的。令人惊讶的是,它的使用难度如此之大。 在您发表评论时编辑了我的回复。 :)【参考方案3】:Velocity 相当陈旧且令人不快,在我看来,有更好的方法来做到这一点:
StringTemplate 是最简单的模板引擎,足以满足您的需求(参见语法示例 here)。 如果您已经在使用 Spring 3,它的 PropertyPlaceholderHelper 类也可以做到这一点,但我不会仅仅为了掌握这一类而使用 Spring。【讨论】:
速度并不完美。但是我认为它的工作非常好,我非常推荐它。此外,工具箱概念允许非常轻松地集成您自己的“模板逻辑”。它与一般的 Servlet(和 Struts 1.x)有很好的集成【参考方案4】:在具有 JSF 2 的 Java Web 应用程序中,其工作方式如下:
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>
【讨论】:
【参考方案5】:其中一种方法是字符串替换:
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);
【讨论】:
这个类的最新版本是org.apache.commons.commons-text中的StringSubstitutor【参考方案6】:另一种选择是添加没有依赖关系的Apache FreeMarker,并将模板定义为:
Welcome Mr. $firstName $lastName !!!
Apache FreeMarker™ 是一个模板引擎:一个基于模板和不断变化的数据生成文本输出(HTML 网页、电子邮件、配置文件、源代码等)的 Java 库。模板是用 FreeMarker 模板语言 (FTL) 编写的,这是一种简单、专业的语言
您可以使用StringTemplateLoader使用字符串加载模板
您可以创建一个 StringTemplateLoader 并将每个模板添加到其中:
【讨论】:
如何使用系统属性替换 Typesafe Config 文件中的占位符?
】如何使用系统属性替换TypesafeConfig文件中的占位符?【英文标题】:HowtousesystempropertiestosubstituteplaceholdersinTypesafeConfigfile?【发布时间】:2013-09-0210:26:46【问题描述】:我需要在我的application.conf文件中引用java.io.tmpdir我用打印了... 查看详情
用动态数据替换占位符
】用动态数据替换占位符【英文标题】:replaceplaceholderwithdynamicdata【发布时间】:2018-04-2319:25:00【问题描述】:是否有使用XSL或java.text.MessageFormat实现以下目标的通用方法?【问题讨论】:【参考方案1】:如果您输入的XML如下:... 查看详情
java - 如何在java代码中的资源上调用Spring的当前属性占位符?
】java-如何在java代码中的资源上调用Spring的当前属性占位符?【英文标题】:HowtoinvokeSpring\'scurrentpropertyplaceholderonresourceinjavacode?【发布时间】:2013-01-2404:45:50【问题描述】:Spring占位符机制非常干净和健壮,不幸的是它只适用... 查看详情
如何替换文本文件中的 $ 占位符?
】如何替换文本文件中的$占位符?【英文标题】:Howtoreplace$placeholdersinatextfile?如何替换文本文件中的$占位符?【发布时间】:2010-09-2918:19:21【问题描述】:我想将“模板”文件的输出通过管道传输到MySQL,该文件中散布着像$dbN... 查看详情
用其他数组中的值替换数组中的占位符
】用其他数组中的值替换数组中的占位符【英文标题】:Replaceplaceholdersinarraywithvaluesfromotherarray【发布时间】:2013-07-3013:26:43【问题描述】:我有2个数组,其中一个带有占位符,它们是另一个数组中的键arr1=array("id"=>"verticalId",... 查看详情
模板和占位符算法
...方括号的子字符串(例如:“hello[name]:中的“name”)。属性映射-以字符串为值的有效对象我需要编写一个代码,用属性映射中的匹配值替换占位符(连同括号)。示 查看详情
用c#替换word文档中的占位符
】用c#替换word文档中的占位符【英文标题】:ReplacePlaceholdersinworddocumentwithc#【发布时间】:2010-09-1523:40:41【问题描述】:我有一个word(.docx)格式的模板,想用我自己的数据替换这个模板中的一些占位符,你知道我在哪里可以找到... 查看详情
用映射字典的值替换嵌套字典中的占位符
】用映射字典的值替换嵌套字典中的占位符【英文标题】:Replaceplaceholderinnesteddictwithvaluesofmappingdict【发布时间】:2017-01-1302:10:54【问题描述】:我有一个嵌套字典,它可以在键和值中包含占位符。example_dict=\'dict1\':\'%(map3)s\':\'da... 查看详情
Micronaut - 解析属性文件中的占位符
】Micronaut-解析属性文件中的占位符【英文标题】:Micronaut-Resolveplaceholdersinpropertiesfile【发布时间】:2019-08-1808:06:52【问题描述】:如何解析类似于下面的属性文件中的占位符。我正在使用一个外部属性文件-dev.properties,其条目... 查看详情
mybatis面试题总结(代码片段)
... 答:是Properties文件中的变量占位符,它可以用于标签属性值和sql内部,属于静态文本替换,比如是Properties文件中的变量占位符,它可以用于标签属性值和sql内部,属于静态文本替换,比如driver会被静态替换为com.mysql.jdbc.Driver... 查看详情
java实现json参数占位符名称替换指定的多个变量值(代码片段)
...ava实现占位符名称替换值占位符现在应该说是比较流行的动态赋值,本文主要介绍了Java占位符名称替换值,根据一串带着参数名占位符的url,替换掉对应参数名的值问题1如果有这样一个字符串Stringinfo="我叫0,我... 查看详情
用 Chrome 中的自定义文本替换默认的 html5 日期占位符
...为“日期/月份/年份”,我如何强制执行我自己的占位符属性?<inputtype="date"name="date"value=""class="date" 查看详情
针对表单字段占位符属性中的特定字母
】针对表单字段占位符属性中的特定字母【英文标题】:Targetingaspecificletterinsideformfieldplaceholderattribute【发布时间】:2015-08-1802:20:28【问题描述】:我有诸如<inputtype="text"placeholder="Name*">之类的表单字段... 查看详情
如何将 R 会话中的值替换为 SQL 绑定变量占位符?
】如何将R会话中的值替换为SQL绑定变量占位符?【英文标题】:HowdoIsubstitutevaluesfromtheRsessionintoSQLbindvariableplaceholders?【发布时间】:2019-08-2316:40:49【问题描述】:我想在R脚本中重用原始SQL。然而,SQL有variablebinding可以让我们参... 查看详情
用c#中列表中的连续元素替换字符串占位符
】用c#中列表中的连续元素替换字符串占位符【英文标题】:Replaceastringplaceholderwithconsecutiveelementsfromalistinc#【发布时间】:2021-12-0509:58:47【问题描述】:我知道有人问过类似的问题,但我找不到任何特别适合我需要的东西,而且... 查看详情
嵌套python字典中的字符串替换/格式化占位符值
】嵌套python字典中的字符串替换/格式化占位符值【英文标题】:Stringreplace/formatplaceholdervaluesinanestedpythondictionary【发布时间】:2016-01-0721:47:11【问题描述】:假设我有一个这样的嵌套字典:example_dict=\'key_one\':\'replace_this\',\'key_two... 查看详情
用 pom.xml 中的值替换占位符名称
】用pom.xml中的值替换占位符名称【英文标题】:Replacingplaceholdernamewithvalueinpom.xml【发布时间】:2021-02-1619:25:21【问题描述】:我正在处理多模块项目,我想在我的pom.xml中放置版本的占位符,以便我们的团队成员可以使用命令行... 查看详情
用 PHP 替换多个占位符?
...我想要做的基本上是让php用我提供的内容替换email.tpl文件中的所有占位符。我的问题是我不想重复代码,因此我创建了一个函数(如下)。如果没有php函数,我会在脚本中执行以下操作//emailtempla 查看详情