Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/grails/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Grails:将属性动态放入ConfigurationHolder.config的替代语法_Java_Grails_Groovy - Fatal编程技术网

Java Grails:将属性动态放入ConfigurationHolder.config的替代语法

Java Grails:将属性动态放入ConfigurationHolder.config的替代语法,java,grails,groovy,Java,Grails,Groovy,因此,我试图编写一个函数,该函数将基本上循环遍历字符串列表(配置键),并将相关值(来自表单)放入ConfigurationHolder.config对象中。这允许管理员用户通过表单修改配置值 我宁愿不必像这样硬编码所有属性: config.my.first.property="foo" config.my.second.property="bar" config.etc="baz" 我一直试图做的事情大致如下: String key = "my.first.property" Object v

因此,我试图编写一个函数,该函数将基本上循环遍历字符串列表(配置键),并将相关值(来自表单)放入
ConfigurationHolder.config
对象中。这允许管理员用户通过表单修改配置值

我宁愿不必像这样硬编码所有属性:

config.my.first.property="foo"
config.my.second.property="bar"
config.etc="baz"
我一直试图做的事情大致如下:

String key = "my.first.property"
Object value = FOO
config.putAt(key, value)
但是当我在以后使用

config.my.first.property
该值未设置为更新后的值


有什么方法可以完成我所描述的,或者我必须对每个属性进行硬编码吗?

您必须拆分“
”上的键,然后自己向下钻取各个级别。幸运的是,明智地使用Groovy的数组切片和
inject
方法,这非常容易——这将适用于任何键(除了病理情况,如空字符串或包含两个连续点的键):

String key=“my.first.property”
对象值=FOO
//将键拆分为其组件
def keyParts=密钥分割(/\./)
//先配置.my.first(即直到最后一个组件),然后设置
//结果ConfigObject上的“属性”(最后一个组件)
keyParts[0..conf.“${k}”
}.“${keyParts[-1]}”=值
String key = "my.first.property"
Object value = FOO

// split the key into its components
def keyParts = key.split(/\./)
// do config.my.first (i.e. up to the last-but-one component) and then set
// "property" (the last component) on the resulting ConfigObject
keyParts[0..<(keyParts.size() - 1)].inject(config) {
  conf, k -> conf."${k}"
}."${keyParts[-1]}" = value