1
私はフィールドのマッピングを作成して、使いやすい名前からさまざまなドメインオブジェクトのメンバー変数にフィールドをマッピングしようとしています。groovy Evalを使用して生成された式を処理する
class MyClass {
Integer amount = 123
}
target = new MyClass()
println "${target.amount}"
fieldMapping = [
'TUITION' : 'target.amount'
]
fieldName = 'TUITION'
valueSource = '${' + "${fieldMapping[fieldName]}" + '}'
println valueSource
value = Eval.me('valueSource')
評価が失敗した:より大きな文脈では、私は、データベースに格納されたユーザ・構築ルールに基づいてElasticSearchクエリを構築するが、MCVEのためだということです。ここでは出力があります:
123
${target.amount}
Caught: groovy.lang.MissingPropertyException: No such property: valueSource for class: Script1
groovy.lang.MissingPropertyException: No such property: valueSource for class: Script1
at Script1.run(Script1.groovy:1)
at t.run(t.groovy:17)
生成された変数名を評価し、値123
を返すために必要な何ですか?実際の問題は、valueSource
が定義されていて、実際の式がvalueSource
ではないことを認識していないことですが、それも脆くなっている可能性があります。
'evaluate()'はうまくいくかもしれないと思っていますが、これはスクリプトのためのものであり、grailsアプリケーションのコンテキストでは機能しません。 –
評価版の[docs](http://docs.groovy-lang.org/latest/html/api/groovy/util/Eval.html)をご覧ください。これらのメソッドは、呼び出し元のスコープを認識していません。 'valueSource'を利用できるようにするには、' symbol'と 'object'を使って' Eval.me'を呼び出すか、 'x' /' xy'/'xyz'メソッドの一つを呼び出さなければなりません。 – hsan
私はドキュメントを見てきました。ありがとう。 –