java中属性中的动态占位符替换

     2023-03-05     229

关键词:

【中文标题】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【问题描述】:我有诸如&lt;inputtype="text"placeholder="Name*"&gt;之类的表单字段... 查看详情

如何将 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 查看详情