0

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

値は更新された値に設定されていません。

私が説明していることを行う方法はありますか、または各プロパティをハードコーディングする必要がありますか?

4

1 に答える 1

2

""のキーを分割し、.自分でレベルをドリルダウンする必要があります。幸い、これはGroovyの配列スライシングとinjectメソッドを適切に使用することで非常に簡単です。これは、どのキーでも機能します(空の文字列や2つの連続するドットを含むキーなどの病理学的ケースを除く)。

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
于 2012-10-10T17:22:22.667 に答える