2

次のコードが与えられた場合:

グルーヴィー:

binding = [key1: "val1"]
def f = new File('test.template')
engine = new GStringTemplateEngine()
template = engine.createTemplate(f).make(binding)
println template.toString()

test.template:

<% keyName = "key1" %>

test.template の keyName で val1 にアクセスする方法はありますか?

これ:

${ binding[keyName] }

機能しません (そのようなプロパティはありません: クラスの key1: groovy.lang.Binding)。何か案は?プロパティを保持しているマップの名前が違うのではないでしょうか?

私はただ書くことができることを知っています:

${ key1 }

しかし、変数 keyName を使用してプロパティ key1 にアクセスする必要があります。

4

1 に答える 1

0

これがより良いかどうかはわかりませんが、次のように動作するようになりました(ある程度)

Map binding = [ keyName: 'key1', key1: "val1", m: [key1:'val100', key2:'val2']]
def f = new File('test.template')
def engine = new groovy.text.GStringTemplateEngine()
def template = engine.createTemplate(f).make(binding)
println template.toString()

次のテンプレートを使用します。

$keyName
$key1
<%= m[keyName] %>

ただし、これは、探している値を保持するサブマップに依存しています。

バインディングで、処理または表示するフィールドのリストを (事前に知るのではなく) 渡すシナリオを見ることができます。そのため、既知の変数からフィールド名を取得してから、その他はサブマップを経由する可能性があります。

于 2014-02-20T22:45:44.060 に答える